충분하지 않은 키 길이 사용
정의
- 짧은 길이의 키를 사용하는 것은 암호화 알고리즘을 취약하게 만들 수 있다.
- 키는 암호화 및 복호화에 사용되는데, 키의 길이가 충분히 길지 않으면 짧은 시간 안에 키를 찾아낼 수 있고, 이를 이용해 공격자가 암호화된 데이터나 패스워드를 복호화할 수 있게 된다.
암호 알고리즘 및 키 길이 선택 시, 암호 알고리즘의 안전성 유지기간과 보안강도별 암호 알고리즘 키 길이 비교표를 기반으로 암호 알고리즘 및 키 길이를 선택해야 한다.
안전한 코딩기법
RSA 알고리즘은 적어도 2,048 비트 이상의 길이를 가진 키와 함께 사용해야 하고, 대칭 암호화 알고리즘(Symmetric Encryption Algorithm)의 경우에는 적어도 128비트 이상의 키를 사용해야 한다(암호 강도 112비트 이상).
코드예제
보안성이 강한 RSA 알고리즘을 사용할 때 키 사이즈를 작게 설정하면 프로그램의 보안 약점이 될 수 있습니다. 아래는 안전하지 않은 코드예제입니다.
#충분하지 않은 키 길이 사용(안전X)
def make_rsa_key_pair_bad():
private_key = RSA.generate(1024)
public_key = private_key.publickey()
def make_ecc_bad():
ecc_curve = registry.get_curve('secp192r1')
private_key = secrets.randbelow(ecc_curve.field.n)
public_key = private_key*ecc_curve.g
RSA, DSA는 키의 길이를 적어도 2048 비트로, ECC의 경우 224 이상으로 설정해야 안전합니다. 다음은 안전한 코드예제입니다.
#충분하지 않은 키 길이 사용(안전O)
def make_rsa_key_pair_good():
private_key = RSA.generate(2048)
public_key = private_key.publickey()
def make_ecc_good():
ecc_curve = registry.get_curve('secp224r1')
private_key = secrets.randbelow(ecc_curve.field.n)
public_key = private_key*ecc_curve.g
보안기능/충분하지 않은 키 길이 사용
[참고문헌] Python 시큐어코딩 가이드(2022) / KISA(한국인터넷진흥원)