Add known weak ciphers to blacklisted calls
The following are known to be weak. - Crypto.Cipher.ARC2 - Crypto.Cipher.ARC4 - Crypto.Cipher.Blowfish - Crypto.Cipher.DES - Crypto.Cipher.XOR - cryptography.hazmat.primitives.ciphers.algorithms.ARC4 - cryptography.hazmat.primitives.ciphers.algorithms.Blowfish - cryptography.hazmat.primitives.ciphers.algorithms.IDEA Change-Id: Ied7910b95ccf1f674ccece4f2f9b0992030952a3
This commit is contained in:
@@ -103,6 +103,20 @@ blacklist_calls:
|
||||
- Crypto.Hash.MD5.new
|
||||
- cryptography.hazmat.primitives.hashes.MD5
|
||||
message: Use of insecure MD2, MD4, or MD5 hash function.
|
||||
- ciphers:
|
||||
qualnames:
|
||||
- Crypto.Cipher.ARC2.new
|
||||
- Crypto.Cipher.ARC4.new
|
||||
- Crypto.Cipher.Blowfish.new
|
||||
- Crypto.Cipher.DES.new
|
||||
- Crypto.Cipher.XOR.new
|
||||
- cryptography.hazmat.primitives.ciphers.algorithms.ARC4
|
||||
- cryptography.hazmat.primitives.ciphers.algorithms.Blowfish
|
||||
- cryptography.hazmat.primitives.ciphers.algorithms.IDEA
|
||||
message: >
|
||||
Use of insecure cipher {func}. Replace with a known secure
|
||||
cipher such as AES.
|
||||
level: HIGH
|
||||
- mktemp_q:
|
||||
qualnames: [tempfile.mktemp]
|
||||
message: Use of insecure and deprecated function (mktemp).
|
||||
|
||||
58
examples/ciphers.py
Normal file
58
examples/ciphers.py
Normal file
@@ -0,0 +1,58 @@
|
||||
from Crypto.Cipher import ARC2
|
||||
from Crypto.Cipher import ARC4
|
||||
from Crypto.Cipher import Blowfish
|
||||
from Crypto.Cipher import DES
|
||||
from Crypto.Cipher import XOR
|
||||
from Crypto.Hash import SHA
|
||||
from Crypto import Random
|
||||
from Crypto.Util import Counter
|
||||
from cryptography.hazmat.primitives.ciphers import Cipher
|
||||
from cryptography.hazmat.primitives.ciphers import algorithms
|
||||
from cryptography.hazmat.primitives.ciphers import modes
|
||||
from cryptography.hazmat.backends import default_backend
|
||||
from struct import pack
|
||||
|
||||
key = b'Sixteen byte key'
|
||||
iv = Random.new().read(ARC2.block_size)
|
||||
cipher = ARC2.new(key, ARC2.MODE_CFB, iv)
|
||||
msg = iv + cipher.encrypt(b'Attack at dawn')
|
||||
|
||||
key = b'Very long and confidential key'
|
||||
nonce = Random.new().read(16)
|
||||
tempkey = SHA.new(key+nonce).digest()
|
||||
cipher = ARC4.new(tempkey)
|
||||
msg = nonce + cipher.encrypt(b'Open the pod bay doors, HAL')
|
||||
|
||||
bs = Blowfish.block_size
|
||||
key = b'An arbitrarily long key'
|
||||
iv = Random.new().read(bs)
|
||||
cipher = Blowfish.new(key, Blowfish.MODE_CBC, iv)
|
||||
plaintext = b'docendo discimus '
|
||||
plen = bs - divmod(len(plaintext),bs)[1]
|
||||
padding = [plen]*plen
|
||||
padding = pack('b'*plen, *padding)
|
||||
msg = iv + cipher.encrypt(plaintext + padding)
|
||||
|
||||
key = b'-8B key-'
|
||||
nonce = Random.new().read(DES.block_size/2)
|
||||
ctr = Counter.new(DES.block_size*8/2, prefix=nonce)
|
||||
cipher = DES.new(key, DES.MODE_CTR, counter=ctr)
|
||||
plaintext = b'We are no longer the knights who say ni!'
|
||||
msg = nonce + cipher.encrypt(plaintext)
|
||||
|
||||
key = b'Super secret key'
|
||||
cipher = XOR.new(key)
|
||||
plaintext = b'Encrypt me'
|
||||
msg = cipher.encrypt(plaintext)
|
||||
|
||||
cipher = Cipher(algorithms.ARC4(key), mode=None, backend=default_backend())
|
||||
encryptor = cipher.encryptor()
|
||||
ct = encryptor.update(b"a secret message")
|
||||
|
||||
cipher = Cipher(algorithms.Blowfish(key), mode=None, backend=default_backend())
|
||||
encryptor = cipher.encryptor()
|
||||
ct = encryptor.update(b"a secret message")
|
||||
|
||||
cipher = Cipher(algorithms.IDEA(key), mode=None, backend=default_backend())
|
||||
encryptor = cipher.encryptor()
|
||||
ct = encryptor.update(b"a secret message")
|
||||
@@ -92,6 +92,11 @@ class FunctionalTests(testtools.TestCase):
|
||||
expect = {'SEVERITY': {'MEDIUM': 8}, 'CONFIDENCE': {'HIGH': 8}}
|
||||
self.check_example('crypto-md5.py', expect)
|
||||
|
||||
def test_ciphers(self):
|
||||
'''Test the `Crypto.Cipher` example.'''
|
||||
expect = {'SEVERITY': {'LOW': 1, 'HIGH': 8}, 'CONFIDENCE': {'HIGH': 9}}
|
||||
self.check_example('ciphers.py', expect)
|
||||
|
||||
def test_eval(self):
|
||||
'''Test the `eval` example.'''
|
||||
expect = {'SEVERITY': {'MEDIUM': 3}, 'CONFIDENCE': {'HIGH': 3}}
|
||||
|
||||
Reference in New Issue
Block a user