No other thoughts. I think option 2 is worth talking about some more. The HMAC thing is also an OK idea, but we may need more key material so that the entropy remains full?

Jim


On Jan 5, 2006, at 6:43 PM, Matt Ball wrote:

Hi Jim,

Let me make sure I understand the idea. Does this describe a possible implementation of the two options?:

Option 1:

        K2[0:127]   = AES-Enc_k1(id)
        K2[128:255] = AES-Enc_k1(id')

where id is a globally unique identifier and id' is also unique, but possibly derived from id.

Option 2:

        K2[0:127]   = AES-Enc_id(k1[0:127])
        K2[128:255] = AES-Enc_id(k1[128:255])

(We have a subtle problem because the AES cipher is using a 256-bit key, but processes 128-bit blocks. To generate the derived key, it would then be necessary to perform at least two encoding operations from the AES engine.)

Concerning the two options, I suspect that Option 1 might be more secure because it is not easy to compute k1 given K2. It also uses the full 256-bit k1 in the correct place in the AES block cipher (i.e. as the key input). However, with Option 1 there is an issue with creating a good value for id' (maybe use the 1's complement of id?). Also, it appears that there is likely a loss of entropy in Option 1, similar to the loss from a hashing function. In fact, I suspect the entropy loss might be greater because of using two block ciphers (each block cipher in this configuration would probably lose roughly 2/3 of a bit of entropy, for a total of 4/3 of a bit).

Option 2 is more symmetric with respect to k1 and k2 and doesn't have the problem of needing an alternate id'. It would also allow a 256-bit (32 byte) id instead of 128-bit. However, if k1[0:127] == k1[128:255], then the derived K2 will also have the upper and lower halves being the same. I suspect this isn't a problem, but it does depart a little from an ideal 256-bit random permutation. Lastly, since the id is being used as a key, there might be weak key problems, although I suspect this isn't an issue.

Option 2 also maintains the full entropy of k1 within K2, which is probably the most compelling reason to use this construct over a hashing function. However, the hashing function approach has a bit more flexibility with allowing variable-length inputs and also protects k1 if K2 is ever discovered.

I'm personally leaning towards using HMAC, although I could be easily persuaded to use AES.

Any other thoughts?

-Matt

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of james
hughes
Sent: Thursday, January 05, 2006 2:56 PM
To: Landon Noll
Cc: james hughes; SISWG
Subject: Re: p1619.1 document (tape), draft version 0.4


We have some challenges.

The CCM spec does not allow long IVs.

Thinking out loud... If we do not want to use SHA-1, would it be
possible to K2 = E_k1(id) or K2 = E_id(k11) where k1 is the key
provided, id is a 16 byte is vendor unique (or standard name) and K2
is the actual media key. This way, we don't introduce a new algorithm
into the standard? (more algorithms, more potential weaknesses).

jim

Reply via email to