A German researcher is asking why Google is using the “horribly broken” RC4 and MD5 cipher as its first-default for SSL.
The change, he notes in this blog post, has gone unnoticed since December 2010, when the Android 2.3 release swapped from a default preference for the AES256-SHA1 cipher (followed by 3DES and AES128), instead defaulting to RC4-MD5 and RC4-SHA1 as its first and second preference.
For those unfamiliar with encryption implementations: there's a host of cipher types available to encryption apps. To ensure that both ends can negotiate an encrypted connection, each end needs to know which ciphers the other end can support – which means stepping through a list of ciphers during handshaking*.
As the researcher, George Lukas, notes, exploits based on MD5 collisions have been known for years.
The guilty party, he asserts, isn't the Android development team, but Java developers – and in a demonstration of how long a zombie decision can keep shambling around calling “braaains!”, it's an implementation recommendation first made in 2002.
As Lukas notes: “So what the fine Google engineers did to reduce our security was merely to copy what was [in the Reference Implementation], defined by the inventors of Java!
“In the Java reference implementation, the code responsible for creating the cipher list is split into two files. First, a priority-ordered set of ciphers is constructed in the CipherSuite class,” he writes. “Then, all enabled ciphers with sufficient priority are added to the list for CipherSuiteList.getDefault(). The cipher list has not experienced relevant changes since the initial import of Java 6 into Hg, when the OpenJDK was brought to life.”
Finally: “The cipher order on the vast majority of Android devices was defined by Sun in 2002 and taken over into the Android project in 2010 as an attempt to improve compatibility. RC4 is considered problematic since 2001 (remember WEP?), MD5 was broken in 2009.” ®
*Bootnote: For the sake of simplicity, the author didn't digress to present a full cryptography primer. ®