RFC 2947

Telnet Encryption: DES3 64 bit Cipher Feedback

πŸ“… published September 2000, from ietf

RFC 2947 Telnet Encryption: DES3 64 bit Cipher Feedback πŸŽ€βœ¨

Okay bestie, this one is the Telnet encryption spec for Triple-DES in cipher feedback mode, and it's literally a Standards Track doc from J. Altman at Columbia University, dated September 2000 πŸ¦‹. It doesn't obsolete or update any other RFCs, so it's a clean slate πŸ’…

Quick vibe check on the title block: it's a Standards Track protocol document, which means the internet community is invited to discuss it and send suggestions 🫢 For the current standardization state, you check "Internet Official Protocol Standards" (STD 1), and distribution is unlimited 🌸 The Internet Society owns the copyright (2000) and all rights are reserved πŸ”₯

Status of This Memo ✨

This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited.

Copyright (C) The Internet Society (2000). All Rights Reserved.

Abstract 🧚

So this doc explains how to use the Triple-DES (data encryption standard) algorithm in cipher feedback mode with the telnet encryption option. Main character energy πŸ‘‘

1. Command Names and Codes πŸ’–

Encryption Type:

DES3_CFB64       3

Suboption Commands:

CFB64_IV         1
CFB64_IV_OK      2
CFB64_IV_BAD     3

2. Command Meanings πŸ“

Here's the main command shape:

IAC SB ENCRYPT IS DES3_CFB64 CFB64_IV <initial vector> IAC SE

So the sender makes a random 8 byte initial vector and sends it over with the CFB64_IV command. The IV goes out in clear text, no cap πŸ™ˆ Only the side that is WILL ENCRYPT is allowed to send CFB64_IV.

IAC SB ENCRYPT REPLY DES3_CFB64 CFB64_IV_OK IAC SE IAC SB ENCRYPT
REPLY DES3_CFB64 CFB64_IV_BAD IAC SE

The sender of these replies either accepts or rejects the IV they got in a CFB64_IV command. Only the side that is DO ENCRYPT can send CFB64_IV_OK and CFB64_IV_BAD. The CFB64_IV_OK command MUST be sent for backwards compatibility with existing implementations. Honestly, there's no real reason to send CFB64_IV_BAD unless there's a protocol violation, like the IV not being the right length (8 bytes) πŸ’€

3. Implementation Rules πŸ”₯

Once a CFB64_IV_OK command has been received, the WILL ENCRYPT side SHOULD do keyid negotiation with the ENC_KEYID command. After the keyid negotiation finds a common keyid, START and END commands can be sent by the WILL ENCRYPT side. Data then gets encrypted with the DES3 64 bit Cipher Feedback algorithm πŸ’…

If encryption (decryption) gets turned off and back on again, and the same keyid is used when restarting, the clear text in between MUST NOT change the state of the encryption (decryption) machine. Iconic behavior πŸ‘‘

If a START command is sent (received) with a different keyid, the encryption (decryption) machine MUST be re-initialized right after the END of the START command, using the new key and the initial vector sent (received) in the last CFB64_IV command πŸ¦‹

If a new CFB64_IV command is sent (received) while encryption (decryption) is enabled, the machine MUST be re-initialized right after the CFB64_IV command ends, using the new initial vector and the keyid sent (received) in the last START command 🌸

If encryption (decryption) is not enabled when a CFB64_IV command is sent (received), the machine MUST be re-initialized after the next START command, using the keyid sent (received) in that START command and the initial vector sent (received) in this CFB64_IV command 🫢

4. Algorithm 🧚

4.1. Diagram

             key1       key2       key3
              |          |          |
              v          v          v
          +-------+  +-------+  +-------+
       +->| DES-e |->| DES-d |->| DES-e |-- +
       |  +-------+  +-------+  +-------+   |
       |                                    v
INPUT --(-------------------------------->(+)+---> DATA
       |                                    |
       +------------------------------------+

Here's the setup, bestie:

  • iV: Initial vector, 64 bits (8 bytes) long.
  • Dn: the nth chunk of 64 bits (8 bytes) of data to encrypt (decrypt).
  • On: the nth chunk of 64 bits (8 bytes) of encrypted (decrypted) output.
V0 = DES-e(DES-d(DES-e(iV, key1),key2),key3)
On = Dn ^ Vn
V(n+1) = DES-e(DES-d(DES-e(On, key1),key2),key3)

5. Integration with the AUTHENTICATION telnet option πŸ’œ

As the telnet ENCRYPTION option specs say, a keyid value of zero means the default encryption key, which might come from the telnet AUTHENTICATION option. If that default key has less than 16 bytes, then DES3_CFB64 MUST NOT be offered or used as a valid telnet encryption option πŸ™ˆ

Here's how to make three DES keys from the available key data:

keys_to_use = bytes of key data / DES block size (8 bytes)

The keys are labeled "key1" through "key6", with "key1" being the first 8 bytes, "key2" the second 8 bytes, and so on up to "key6" being the sixth 8 bytes (if available).

When two keys are available:

  • data sent from the server is encrypted with key1, decrypted with key2, and encrypted with key1;
  • data sent from the client is encrypted with key2, decrypted with key1, and encrypted with key2

When three keys are available:

  • data sent from the server is encrypted with key1, decrypted with key2, and encrypted with key3;
  • data sent from the client is encrypted with key2, decrypted with key3, and encrypted with key1

When four keys are available:

  • data sent from the server is encrypted with key1, decrypted with key2, and encrypted with key3;
  • data sent from the client is encrypted with key2, decrypted with key4, and encrypted with key1

When five keys are available:

  • data sent from the server is encrypted with key1, decrypted with key2, and encrypted with key3;
  • data sent from the client is encrypted with key2, decrypted with key4, and encrypted with key5

When six keys are available:

  • data sent from the server is encrypted with key1, decrypted with key2, and encrypted with key3;
  • data sent from the client is encrypted with key4, decrypted with key5, and encrypted with key6

In every case, the keys used by DES3_CFB64 MUST have their parity corrected after they're worked out with the algorithm above πŸ”₯

Note that this algorithm assumes it's safe to use a non-DES key (or part of one) as a DES key. That isn't necessarily true for every cipher system, but we set it as the default because it holds for most authentication systems people use today, and it keeps compatibility with existing implementations. New telnet AUTHENTICATION mechanisms MAY specify other ways to pick the keys for this cipher suite in their own specs, if the session key from that mechanism isn't a DES key and this algorithm wouldn't be safe to use 🌈

6. Security Considerations πŸ’€

Encryption using Cipher Feedback does NOT ensure data integrity, and I'm so serious about this one 😭 An active attacker can modify text to a limited degree, as long as they can predict the clear text being transmitted. The limits on the attacker are real: only 8 bytes can be changed at a time, and the following 8-byte block gets corrupted, so detection is likely. Still, it's possible that an active attacker could exploit this weakness, so please be careful 🚨

The tradeoff is that adding a message authentication code (MAC) would noticeably increase the number of bytes needed to send a single character in the telnet protocol, which would hurt performance on slow (i.e. dialup) links 🐒

7. Acknowledgments 🫢

This document was based on the "Telnet Encryption: DES 64 bit Cipher Feedback" document that Dave Borman of Cray Research originally wrote, with help from the IETF Telnet Working Group πŸŽ€

Author's Address 🌸

Jeffrey Altman, Editor Columbia University 612 West 115th Street Room 716 New York NY 10025 USA

Phone: +1 (212) 854-1344 EMail: jaltman@columbia.edu

Copyright (C) The Internet Society (2000). All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement πŸ¦‹

Funding for the RFC Editor function is currently provided by the Internet Society.

πŸ“¦ where this page comes from