취약한 RSA 키 길이 사용
Use of Weak RSA Key
설명
취약한 RSA 키 길이 사용은 RSA 공개키 암호에서 키 비트 수가 너무 짧게 설정될 때 발생하는 취약점입니다. 키 길이가 짧으면(예: 1024bit) 현대의 계산 능력으로 수학적 공격(소인수분해 등)을 통해 비교적 짧은 시간 안에 비밀키가 추출될 수 있습니다. 공격자는 이렇게 약한 키를 대상으로 브루트포스나 특수 소인수분해 알고리즘을 사용해 키를 복구하고, 이후 암호화된 민감 정보 복호화, 위조된 서명 생성 등 다양한 공격을 수행할 수 있습니다.
잠재적 영향
암호 강도 저하로 인한 키 탈취(취약한 암호 강도): 키 길이가 짧아 수학적 공격으로 비밀키가 현실적인 시간 안에 추출될 수 있습니다.
민감 정보 노출(데이터 유출): 복구된 비밀키를 사용해 과거/현재의 암호화된 데이터(예: 개인정보, 세션 토큰)를 복호화할 수 있습니다.
위조 서명 및 가장(신뢰 위조): 공격자가 탈취한 키로 위조된 디지털 서명을 생성하거나 서버·사용자를 가장(impersonation)할 수 있습니다.
해결 방법
최소 2048bit 이상 RSA 키 사용: 새로 생성하는 RSA 키는 2048bit 이상을 기본값으로 사용하고, 보안 요구가 높다면 3072bit 이상도 검토합니다.
키 길이 하드코딩: 키 생성 코드에서 비트 수를 상수로 정의하고, 2048 미만 값이 들어오지 않도록 합니다.
라이브러리 가이드 준수: 언어/프레임워크(예: Go crypto/rsa)의 권장 키 길이와 설정 가이드를 따릅니다.
주기적인 키 교체(key rotation): 장기간 사용 중인 구 키(old key)를 정기적으로 폐기하고 새 키를 생성해 사용합니다.
레거시 호환 모드 점검: 과거 시스템과의 호환을 위해 1024bit 등을 허용하는 옵션이 켜져 있지 않은지 점검하고 비활성화합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드:
generateWeakRSAKey함수는 RSA 키 길이를 1024bit로 고정해서 생성합니다. 1024bit RSA는 현대의 연산 능력과 클라우드 자원을 활용한 공격으로 소인수분해가 점점 현실적인 수준이 되고 있으며, 여러 표준에서도 사용을 중단하도록 권고합니다. 이 길이의 키를 사용하면 공격자가 수학적 공격을 통해 비밀키를 복구하고, 그 키로 암호화된 데이터를 복호화하거나 서명을 위조할 위험이 큽니다.안전한 코드:
generateStrongRSAKey함수는 최소 2048bit 이상(MinRSAKeySize)을 사용해 키를 생성합니다. 2048bit는 현재 널리 권장되는 최소 RSA 키 길이로, 1024bit보다 소인수분해 난이도가 기하급수적으로 커져 현실적인 시간 안에 키를 깨기 어렵습니다. 또한 키 길이를 상수로 관리해 실수나 설정 오류로 2048 미만 값이 사용되지 않도록 했습니다.
참조
Last updated