The popular mobile messaging application WhatsApp Messenger has a major design flaw in its cryptographic implementation that could allow attackers to decrypt intercepted messages, according to a Dutch developer.
The problem is that the same key is used to encrypt both outgoing and incoming streams between the client and the WhatsApp server, said Thijs Alkemade, a computer science and mathematics student at Utrecht University in the Netherlands and lead developer of the open-source Adium instant messaging client for Mac OS X.
“RC4 is a PRNG [pseudo-random number generator] that generates a stream of bytes, which are xored [a crypto operation] with the plaintext that is to be encrypted. By xoring the ciphertext with the same stream, the plaintext is recovered,” Alkemade said Tuesday in a blog post that describes the issue in detail.
Because of this, if two messages are encrypted with the same key and an attacker can intercept them, like on an open wireless network, he can analyze them to cancel out the key and eventually recover the original plaintext information.
Reusing the key in this manner is a basic crypto implementation error that the WhatsApp developers should have been aware of, Alkemade said Wednesday. It’s a mistake made by the Soviets in the 1950s and by Microsoft in its VPN software in 1995, he said.
Alkemade released proof-of-concept exploit code for the vulnerability, but initially tested it on the WhatsPoke open-source library, not on the official WhatsApp client. Since then he has confirmed that the issue exists in the WhatsApp clients for Nokia Series 40 and Android devices.
“I don’t think the situation will be different with the iOS client,” he said.
WhatsApp also uses the same RC4 encryption key for HMAC (hash-based message authentication code) operations to authenticate messages.
This allows an attacker to intercept a message sent by a user to the server and resend it back to the user as if it came from the WhatsApp server, but this is not something that can be easily exploited, Alkemade said.
The Dutch developer didn’t attempt to contact WhatsApp before disclosing the issue publicly. “I thought that it’s important for people to know that WhatsApp is not secure and I didn’t expect them to fix it rapidly,” he said.
Fixing this doesn’t require rethinking the entire encryption implementation, Alkemade said. If they add a method to generate different keys for encryption in both directions, as well as for message authentication, then the problem is solved, he said.
According to Alkemade, users for now should assume that anyone who can intercept their WhatsApp connections can also decrypt their messages and should consider their previous WhatsApp conversations compromised.
Until the issue is fixed the only thing that users can do to protect themselves is to stop using the application, Alkemade said.
”WhatsApp takes security seriously and is continually thinking of ways to improve our product,” WhatsApp said in an emailed statement. “While we appreciate feedback, we’re concerned that the blogger’s story describes a scenario that is more theoretical in nature. Also stating that all conversations should be considered compromised is inaccurate,” the company said.
The company did not respond to a request seeking further clarification on why it considers the scenario theoretical and that statement inaccurate.
According to Matthew Green, a cryptography professor at Johns Hopkins University in Baltimore, using the same key for both sent and received messages is a problem because WhatsApp uses the RC4 stream cipher.
”A known feature of XOR-based ciphers is that if you have two messages encrypted with the same stream of (pseudo)random bytes, you can XOR the ciphertexts together,” he said. “What happens is the RC4 bytes cancel out and you get the XOR of the two messages.”
”Now in some cases this is gibberish,” Green said. “However, if you know what some fields in at least one received message are, you can easily cancel them out and, yes, recover the message bits from the other message.”
There are also other tricks that can be used, Green said. “It’s a really bad thing and you should assume worst case that the messages are now cleartext.”
Updated at 1 p.m. to add comments from WhatsApp and a cryptography professor.