Add info to MessageKey HKDF, change order of RootKey derivation.

This commit is contained in:
Moxie Marlinspike 2013-11-26 09:08:52 -08:00
parent 44092a3eff
commit f7b71e5e28
3 changed files with 5 additions and 5 deletions

View File

@ -38,7 +38,7 @@ public class ChainKey {
public MessageKeys getMessageKeys() { public MessageKeys getMessageKeys() {
HKDF kdf = new HKDF(); HKDF kdf = new HKDF();
byte[] inputKeyMaterial = getBaseMaterial(MESSAGE_KEY_SEED); byte[] inputKeyMaterial = getBaseMaterial(MESSAGE_KEY_SEED);
DerivedSecrets keyMaterial = kdf.deriveSecrets(inputKeyMaterial, null); DerivedSecrets keyMaterial = kdf.deriveSecrets(inputKeyMaterial, "WhisperMessageKeys".getBytes());
return new MessageKeys(keyMaterial.getCipherKey(), keyMaterial.getMacKey(), index); return new MessageKeys(keyMaterial.getCipherKey(), keyMaterial.getMacKey(), index);
} }

View File

@ -71,8 +71,8 @@ public class RatchetingSession {
sessionRecord.setRootKey(sendingChain.first); sessionRecord.setRootKey(sendingChain.first);
} }
public static Pair<RootKey, ChainKey> calculate3DHE(ECKeyPair ourEphemeral, ECPublicKey theirEphemeral, private static Pair<RootKey, ChainKey> calculate3DHE(ECKeyPair ourEphemeral, ECPublicKey theirEphemeral,
IdentityKeyPair ourIdentity, IdentityKey theirIdentity) IdentityKeyPair ourIdentity, IdentityKey theirIdentity)
throws InvalidKeyException throws InvalidKeyException
{ {
try { try {

View File

@ -30,8 +30,8 @@ public class RootKey {
HKDF kdf = new HKDF(); HKDF kdf = new HKDF();
byte[] sharedSecret = Curve.calculateAgreement(theirEphemeral, ourEphemeral.getPrivateKey()); byte[] sharedSecret = Curve.calculateAgreement(theirEphemeral, ourEphemeral.getPrivateKey());
DerivedSecrets keys = kdf.deriveSecrets(sharedSecret, key, "WhisperRatchet".getBytes()); DerivedSecrets keys = kdf.deriveSecrets(sharedSecret, key, "WhisperRatchet".getBytes());
RootKey newRootKey = new RootKey(keys.getMacKey().getEncoded()); RootKey newRootKey = new RootKey(keys.getCipherKey().getEncoded());
ChainKey newChainKey = new ChainKey(keys.getCipherKey().getEncoded(), 0); ChainKey newChainKey = new ChainKey(keys.getMacKey().getEncoded(), 0);
return new Pair<RootKey, ChainKey>(newRootKey, newChainKey); return new Pair<RootKey, ChainKey>(newRootKey, newChainKey);
} }