The process of encryption in Cryptophone product is as follows:
1. The key used for each call is generated using a 4096-bit 'Diffie-Hellman' shared secret exchange, 'hashing' the resulting 4096 bits to the 256 bit session key by means of SHA256. The random material required for the Diffie-Hellman exchange is generated by using the least significant bit from the microphone signal (not during calls of course) and enhancing this entropy with the 'Fortuna' algorithm. This scheme ensures that each encrypted call is performed with a completely new and random key. All key material is securely erased immediately after the call ends.
2. The SHA256 version of the key is used in three ways:
a) Used as input to the AES cipher, used with a counter, to ensure randomness in the 'stream' of data.
b) Used as input to the Twofish cipher, used with a counter, to ensure randomness in the 'stream' of data.
c) To prevent man-in-the-middle attacks, a six-letter hash is generated from the Diffie-Hellman result and displayed to the user. The user then reads three letters over the encrypted line to the communication partner and verifies the three letters the communication partner reads to him. If there were a discrepancy in the six letters, a man-in-the-middle attack has been detected.
3. The results of 2a and 2b are XOR'ed (combined at an individual bit level, where if the two bits are the same, the result is '0', if different, '1'). The result is that a compromise of only one of the ciphers will not compromise the encrypted conversation.
4. The now combined 'keystream' is once again XOR'ed with the data representation of the voice/data needed for the call, and send to the other party. |