This checker looks for usages of standard cryptographic algorithms in configurations that are prone to vulnerabilities. There are currently three classes of problems that are covered by this checker:

  • Creating an instance of javax.crypto.Cipher using either the default settings or the notoriously insecure ECB mode. In particular, Java's default Cipher.getInstance(AES) returns a cipher object that operates in ECB mode. Dynamically constructed transformation strings are also flagged, as they may conceal an instance of ECB mode. The problem with ECB mode is that encrypting the same block of plaintext always yields the same block of ciphertext. Hence, repetitions in the plaintext translate into repetitions in the ciphertext, which can be readily used to conduct cryptanalysis. The use of IES-based cipher algorithms also raises an error, as all currently available implementations use ECB mode under the hood.

  • Using the Diffie-Hellmann protocol on prime fields. Most library implementations of Diffie-Hellman on prime fields have serious issues that can be exploited by an attacker. Any operation that may involve this protocol will be flagged by the checker. Implementations of the protocol based on elliptic curves (ECDH) are secure and should be used instead.

  • Using DSA for digital signatures. Some widely used crypto libraries accept invalid DSA signatures in specific configurations. The checker will flag all cryptographic operations that may involve DSA.