From 6da252fb4eae25bacfd3448a62edcd024ba9c217 Mon Sep 17 00:00:00 2001 From: Werner Dittmann Date: Sun, 11 Mar 2012 09:57:52 +0000 Subject: [PATCH] Fix F8 crypto mode and change handling of secret SRTP key data. These modifications remove unnecessary copying of SRTP key data and overwrite the key data right after secure state was reached (in ZRTP lib). This makes it harder to extract secret key data in memory dumps. --- lib/installer-exclude/zrtp4j-light.jar | Bin 181719 -> 181847 bytes .../transform/srtp/SRTCPCryptoContext.java | 31 ++++--- .../neomedia/transform/srtp/SRTPCipherF8.java | 32 ++++--- .../transform/srtp/SRTPCryptoContext.java | 35 +++++--- .../transform/srtp/SRTPTransformEngine.java | 80 ++---------------- 5 files changed, 64 insertions(+), 114 deletions(-) diff --git a/lib/installer-exclude/zrtp4j-light.jar b/lib/installer-exclude/zrtp4j-light.jar index f5485391a10ead0785521bf12f05ba40f57cb20e..f0a028d55ded3fa89e7bc52b1331055e226fa5ae 100755 GIT binary patch delta 34019 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 LNR9D;Gr0c;rcf;y delta 33802 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 diff --git a/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTCPCryptoContext.java b/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTCPCryptoContext.java index e819995aa..ff18988f3 100644 --- a/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTCPCryptoContext.java +++ b/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTCPCryptoContext.java @@ -26,6 +26,8 @@ */ package net.java.sip.communicator.impl.neomedia.transform.srtp; +import java.util.Arrays; + import net.java.sip.communicator.impl.neomedia.*; import org.bouncycastle.crypto.digests.SHA1Digest; @@ -208,22 +210,22 @@ public SRTCPCryptoContext(long ssrcIn, saltKey = null; break; + case SRTPPolicy.AESF8_ENCRYPTION: + cipherF8 = new AESFastEngine(); + case SRTPPolicy.AESCM_ENCRYPTION: cipher = new AESFastEngine(); encKey = new byte[this.policy.getEncKeyLength()]; - saltKey = new byte[this.policy.getSaltKeyLength()]; - - case SRTPPolicy.AESF8_ENCRYPTION: - cipherF8 = new AESFastEngine(); + saltKey = new byte[this.policy.getSaltKeyLength()]; break; + case SRTPPolicy.TWOFISHF8_ENCRYPTION: + cipherF8 = new TwofishEngine(); + case SRTPPolicy.TWOFISH_ENCRYPTION: cipher = new TwofishEngine(); encKey = new byte[this.policy.getEncKeyLength()]; saltKey = new byte[this.policy.getSaltKeyLength()]; - - case SRTPPolicy.TWOFISHF8_ENCRYPTION: - cipherF8 = new TwofishEngine(); break; } @@ -499,7 +501,7 @@ public void processPacketAESF8(RawPacket pkt, int index) SRTPCipherF8.process(cipher, pkt.getBuffer(), pkt.getOffset() + payloadOffset, - payloadLength, ivStore, encKey, saltKey, cipherF8); + payloadLength, ivStore, cipherF8); } /** @@ -596,8 +598,9 @@ public void deriveSrtcpKeys() KeyParameter encryptionKey = new KeyParameter(masterKey); cipher.init(true, encryptionKey); - cipherCtr.getCipherStream(cipher, encKey, - policy.getEncKeyLength(), ivStore); + Arrays.fill(masterKey, (byte)0); + + cipherCtr.getCipherStream(cipher, encKey, policy.getEncKeyLength(), ivStore); if (authKey != null) { @@ -622,16 +625,20 @@ public void deriveSrtcpKeys() break; } } + Arrays.fill(authKey, (byte)0); // compute the session salt label = 5; computeIv(label); - cipherCtr.getCipherStream(cipher, saltKey, - policy.getSaltKeyLength(), ivStore); + cipherCtr.getCipherStream(cipher, saltKey, policy.getSaltKeyLength(), ivStore); + Arrays.fill(masterSalt, (byte)0); // As last step: initialize cipher with derived encryption key. + if (cipherF8 != null) + SRTPCipherF8.deriveForIV(cipherF8, encKey, saltKey); encryptionKey = new KeyParameter(encKey); cipher.init(true, encryptionKey); + Arrays.fill(encKey, (byte)0); } diff --git a/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTPCipherF8.java b/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTPCipherF8.java index bce7ea727..d72e9a1fc 100644 --- a/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTPCipherF8.java +++ b/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTPCipherF8.java @@ -55,6 +55,7 @@ * We use AESCipher to handle basic AES encryption / decryption. * * @author Bing SU (nova.su@gmail.com) + * @author Werner Dittmann */ public class SRTPCipherF8 { @@ -74,16 +75,8 @@ class F8Context long J; } - public static void process(BlockCipher cipher, byte[] data, int off, - int len, byte[] iv, byte[] key, byte[] salt, BlockCipher f8Cipher) + public static void deriveForIV(BlockCipher f8Cipher, byte[] key, byte[] salt) { - F8Context f8ctx = new SRTPCipherF8().new F8Context(); - - /* - * Get memory for the derived IV (IV') - */ - f8ctx.ivAccent = new byte[BLKLEN]; - /* * Get memory for the special key. This is the key to compute the * derived IV (IV'). @@ -111,13 +104,24 @@ public static void process(BlockCipher cipher, byte[] data, int off, */ KeyParameter encryptionKey = new KeyParameter(maskedKey); f8Cipher.init(true, encryptionKey); + saltMask = null; + maskedKey = null; + } + + public static void process(BlockCipher cipher, byte[] data, int off, int len, + byte[] iv, BlockCipher f8Cipher) + { + F8Context f8ctx = new SRTPCipherF8().new F8Context(); + + /* + * Get memory for the derived IV (IV') + */ + f8ctx.ivAccent = new byte[BLKLEN]; /* - * Use the masked key to encrypt the original IV to produce IV'. + * Use the derived IV encryption setup to encrypt the original IV to produce IV'. */ f8Cipher.processBlock(iv, 0, f8ctx.ivAccent, 0); - saltMask = null; - maskedKey = null; f8ctx.J = 0; // initialize the counter f8ctx.S = new byte[BLKLEN]; // get the key stream buffer @@ -138,7 +142,7 @@ public static void process(BlockCipher cipher, byte[] data, int off, processBlock(cipher, f8ctx, data, off, data, off, inLen); } } - + /** * Encrypt / Decrypt a block using F8 Mode AES algorithm, read len bytes * data from in at inOff and write the output into out at outOff @@ -157,7 +161,7 @@ public static void process(BlockCipher cipher, byte[] data, int off, * length of the input data */ private static void processBlock(BlockCipher cipher, F8Context f8ctx, - byte[] in, int inOff, byte[] out, int outOff, int len) + byte[] in, int inOff, byte[] out, int outOff, int len) { /* * XOR the previous key stream with IV' diff --git a/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTPCryptoContext.java b/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTPCryptoContext.java index 2825808e7..e8f54db9c 100644 --- a/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTPCryptoContext.java +++ b/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTPCryptoContext.java @@ -26,6 +26,8 @@ */ package net.java.sip.communicator.impl.neomedia.transform.srtp; +import java.util.Arrays; + import net.java.sip.communicator.impl.neomedia.*; import org.bouncycastle.crypto.*; @@ -256,23 +258,23 @@ public SRTPCryptoContext(long ssrcIn, int rocIn, long kdr, saltKey = null; break; + case SRTPPolicy.AESF8_ENCRYPTION: + cipherF8 = new AESFastEngine(); + //$FALL-THROUGH$ + case SRTPPolicy.AESCM_ENCRYPTION: cipher = new AESFastEngine(); encKey = new byte[policy.getEncKeyLength()]; saltKey = new byte[policy.getSaltKeyLength()]; - //$FALL-THROUGH$ - - case SRTPPolicy.AESF8_ENCRYPTION: - cipherF8 = new AESFastEngine(); break; + case SRTPPolicy.TWOFISHF8_ENCRYPTION: + cipherF8 = new TwofishEngine(); + case SRTPPolicy.TWOFISH_ENCRYPTION: cipher = new TwofishEngine(); encKey = new byte[this.policy.getEncKeyLength()]; saltKey = new byte[this.policy.getSaltKeyLength()]; - - case SRTPPolicy.TWOFISHF8_ENCRYPTION: - cipherF8 = new TwofishEngine(); break; } @@ -553,9 +555,8 @@ public void processPacketAESF8(RawPacket pkt) final int payloadOffset = pkt.getHeaderLength(); final int payloadLength = pkt.getPayloadLength(); - SRTPCipherF8.process(cipher, pkt.getBuffer(), pkt.getOffset() + - payloadOffset, payloadLength, ivStore, encKey, saltKey, - cipherF8); + SRTPCipherF8.process(cipher, pkt.getBuffer(), pkt.getOffset() + payloadOffset, + payloadLength, ivStore, cipherF8); } /** @@ -675,8 +676,9 @@ public void deriveSrtpKeys(long index) KeyParameter encryptionKey = new KeyParameter(masterKey); cipher.init(true, encryptionKey); - cipherCtr.getCipherStream(cipher, encKey, policy.getEncKeyLength(), - ivStore); + Arrays.fill(masterKey, (byte)0); + + cipherCtr.getCipherStream(cipher, encKey, policy.getEncKeyLength(), ivStore); // compute the session authentication key if (authKey != null) @@ -702,15 +704,20 @@ public void deriveSrtpKeys(long index) break; } } + Arrays.fill(authKey, (byte)0); + // compute the session salt label = 0x02; computeIv(label, index); - cipherCtr.getCipherStream(cipher, saltKey, policy.getSaltKeyLength(), - ivStore); + cipherCtr.getCipherStream(cipher, saltKey, policy.getSaltKeyLength(), ivStore); + Arrays.fill(masterSalt, (byte)0); // As last step: initialize cipher with derived encryption key. + if (cipherF8 != null) + SRTPCipherF8.deriveForIV(cipherF8, encKey, saltKey); encryptionKey = new KeyParameter(encKey); cipher.init(true, encryptionKey); + Arrays.fill(encKey, (byte)0); } /** diff --git a/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTPTransformEngine.java b/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTPTransformEngine.java index e6a041633..47a34df30 100644 --- a/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTPTransformEngine.java +++ b/src/net/java/sip/communicator/impl/neomedia/transform/srtp/SRTPTransformEngine.java @@ -20,26 +20,6 @@ public class SRTPTransformEngine implements TransformEngine { - /** - * Master key of this SRTP session - */ - private final byte[] masterKey; - - /** - * Master salt key of this SRTP session - */ - private final byte[] masterSalt; - - /** - * SRTP processing policy - */ - private final SRTPPolicy srtpPolicy; - - /** - * SRTCP processing policy - */ - private final SRTPPolicy srtcpPolicy; - /** * The default SRTPCryptoContext, which will be used to derivate other * contexts. @@ -64,23 +44,15 @@ public class SRTPTransformEngine public SRTPTransformEngine(byte[] masterKey, byte[] masterSalt, SRTPPolicy srtpPolicy, SRTPPolicy srtcpPolicy) { - this.masterKey = new byte[masterKey.length]; - System.arraycopy(masterKey, 0, this.masterKey, 0, masterKey.length); - - this.masterSalt = new byte[masterSalt.length]; - System.arraycopy(masterSalt, 0, this.masterSalt, 0, masterSalt.length); - - this.srtpPolicy = srtpPolicy; - this.srtcpPolicy = srtcpPolicy; this.defaultContext = new SRTPCryptoContext(0, 0, 0, - this.masterKey, - this.masterSalt, - this.srtpPolicy); + masterKey, + masterSalt, + srtpPolicy); this.defaultContextControl = new SRTCPCryptoContext(0, - this.masterKey, - this.masterSalt, - this.srtcpPolicy); + masterKey, + masterSalt, + srtcpPolicy); } /** @@ -103,46 +75,6 @@ public PacketTransformer getRTPTransformer() return new SRTPTransformer(this); } - /** - * Get the master encryption key - * - * @return the master encryption key - */ - public byte[] getMasterKey() - { - return this.masterKey; - } - - /** - * Get the master salt key - * - * @return the master salt key - */ - public byte[] getMasterSalt() - { - return this.masterSalt; - } - - /** - * Get the SRTCP policy - * - * @return the SRTCP policy - */ - public SRTPPolicy getSRTCPPolicy() - { - return this.srtcpPolicy; - } - - /** - * Get the SRTP policy - * - * @return the SRTP policy - */ - public SRTPPolicy getSRTPPolicy() - { - return this.srtpPolicy; - } - /** * Get the default SRTPCryptoContext *