Internet Engineering Task Force (IETF) G. Hudson
Request for Comments: 6803 MIT Kerberos Consortium
Category: Informational November 2012
Camellia Encryption for Kerberos 5
This document specifies two encryption types and two corresponding
checksum types for the Kerberos cryptosystem framework defined in RFC
3961. The new types use the Camellia block cipher in CBC mode with
ciphertext stealing and the CMAC algorithm for integrity protection.
Status of This Memo
This document is not an Internet Standards Track specification; it is
published for informational purposes.
This document is a product of the Internet Engineering Task Force
(IETF). It represents the consensus of the IETF community. It has
received public review and has been approved for publication by the
Internet Engineering Steering Group (IESG). Not all documents
approved by the IESG are a candidate for any level of Internet
Standard; see Section 2 of RFC 5741.
Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
Copyright (c) 2012 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Hudson Informational [Page 1]RFC 6803 Camellia Encryption for Kerberos 5 November 20121. Introduction
The Camellia block cipher, described in [RFC3713], has a 128-bit
block size and a 128-bit, 192-bit, or 256-bit key size, similar to
AES. This document specifies Kerberos encryption and checksum types
for Camellia using 128-bit or 256-bit keys. The new types conform to
the framework specified in [RFC3961] but do not use the simplified
Like the simplified profile, the new types use key derivation to
produce keys for encryption, integrity protection, and checksum
operations. Instead of the key derivation function described in
[RFC3961], Section 5.1, the new types use a key derivation function
from the family specified in [SP800-108].
The new types use the CMAC algorithm for integrity protection and
checksum operations. As a consequence, they do not rely on a hash
algorithm except when generating keys from strings.
Like the AES encryption types [RFC3962], the new encryption types use
CBC mode with ciphertext stealing [RFC3962] to avoid the need for
padding. They also use the same PBKDF2 algorithm for key generation
from strings, with a modification to the salt string to ensure that
different keys are generated for Camellia and AES encryption types.
2. Protocol Key Representation
The Camellia key space is dense, so we use random octet strings
directly as keys. The first bit of the Camellia bit string is the
high bit of the first byte of the random octet string.
3. Key Derivation
We use a key derivation function from the family specified in
[SP800-108], Section 5.2, "KDF in Feedback Mode". The PRF parameter
of the key derivation function is CMAC with Camellia-128 or
Camellia-256 as the underlying block cipher; this PRF has an output
size of 128 bits. A block counter is used with a length of 4 bytes,
represented in big-endian order. The length of the output key in
bits (denoted as k) is also represented as a 4-byte string in big-
endian order. The label input to the KDF is the usage constant
supplied to the key derivation function, and the context is unused.
In the following summary, | indicates concatenation. The random-to-
key function is the identity function, as defined in Section 6. The
k-truncate function is defined in [RFC3961], Section 5.1.
Hudson Informational [Page 2]RFC 6803 Camellia Encryption for Kerberos 5 November 2012
n = ceiling(k / 128)
K(0) = zeros
K(i) = CMAC(key, K(i-1) | i | constant | 0x00 | k)
DR(key, constant) = k-truncate(K(1) | K(2) | ... | K(n))