> On Dec 20, 2017, at 8:30 AM, Jamil Nimeh <jamil.j.ni...@oracle.com> wrote:
> 
> Hi Max,
> 
> The former approach for KDF would be the correct one.  If this isn't a 
> derivation algorithm that has use outside our Kerberos implementation then 
> I'm not sure it's worth making it a general KDF implementation because of its 
> specificity.  But I have no strong feelings either way.

I also don't think it's necessary to provide a algorithm name for this KDF.

This example shows that a deriveKey(deriveParams) is useful.

--Max

> 
> --Jamil
> 
> On 12/19/2017 4:04 PM, Weijun Wang wrote:
>> 
>>> On Dec 20, 2017, at 12:02 AM, Jamil Nimeh <jamil.j.ni...@oracle.com> wrote:
>>>>> - can you verify if the new proposed KDF API could be used for the 
>>>>> key-derivation parts in the future?
>>>> I'll try.
>>> I took a quick look at the dr() method and I'm pretty sure this can fit 
>>> into the KDF API as it currently sits.  I'd like to read that section of 
>>> the RFC just to be sure, but it looks pretty straightforward.  Out of 
>>> curiosity does this KDF get used anywhere other than Kerberos?
>> I don't think so. You can see it is defined inside the Kerberos RFC.
>> 
>> There are 2 key derivations inside Kerberos. You can see them inside the 
>> test [1]:
>> 
>> 1. From (passphrase,salt,(optional) iteration count) to a basekey, lines 53, 
>> 56.
>> 
>> 2. From (basekey, usage, type) to an application key, line 165. Here type 
>> can be one of checksum, encryption or integrity, and usage can be an 
>> arbitrary integer (For example, 1 for issuing a key, 2 for send a message).
>> 
>> It looks the KDF API can be called this way:
>> 
>> KDC kdf = KDF.getInstance("Kerberos5/base");
>> kdf.init(passphraseAsKey, (salt+count), List.of(empty));
>> Key baseKey = kdf.deriveKey();
>> 
>> KDC kdf2 = KDF.getInstance("Kerberos5/app");
>> kdf2.init(baseKey, null, List.of(usage+type));
>> Key appKey = kdf2.deriveKey();
>> 
>> and either kdf2.init() should be run again and again for different 
>> usage+type, or create kdf2 each time.
>> 
>> Or, if there is a deriveKey(DerivationParameterSpec) method, it can be 
>> simpler
>> 
>> KDC kdf = KDF.getInstance("Kerberos5");
>> kdf.init(passphraseAsKey, (salt+count));
>> Key appKey = kdf2.deriveKey(usage+type);
>> 
>> Thanks
>> Max
>> 
>> [1] 
>> http://cr.openjdk.java.net/~weijun/8014628/webrev.00/test/jdk/sun/security/krb5/etype/KerberosAesSha2.java.html
> 

Reply via email to