| > The only whitepaper I could find for the whole system was for ShadowChat, which says they use AES-256-CBC to encrypt the chat. Okay. > AES is a symmetric encryption algorithm, and a strange choice for a chat protocol. No, it's the standard choice. Signal uses AES-256-CBC + HMAC-SHA-256, for example. > Furthermore, CBC is not great at hiding patterns, and chat will often have a lot of patterns. That's not true. CBC mode isn't great at hiding patterns with IV reuse. Solution: Don't reuse IVs. The problem with CBC mode is that it's unauthenticated, and as a result is often susceptible to padding oracle attacks that allow messages to be decrypted byte-at-a-time. https://paragonie.com/blog/2015/05/using-encryption-and-auth... A better mode would be GCM, or maybe GCM-SIV, or scrap AES entirely in favor of ChaCha20-Poly1305. |
On the other hand I agree to switching over to a different mode to eliminate padding oracle attacks.
The IV are 16 random bytes generated by OpenSSL's RAND_bytes. https://github.com/shadowproject/shadow/blob/master/src/smes...