1. 취약한 암호화 알고리즘 사용의 위험성
암호화의 목적은 데이터의 기밀성을 유지하는 것입니다. 그러나 기술의 발전과 컴퓨팅 성능의 향상으로 인해 과거에는 안전했던 알고리즘들이 더 이상 안전하지 않게 되었습니다. CWE-327은 이미 해독 방법이 알려졌거나, 무차별 대입 공격(Brute-force)에 취약해진 알고리즘을 사용하여 데이터를 보호할 때 발생합니다. 공격자는 이를 통해 암호화된 비밀번호를 복구하거나 민감한 통신 내용을 가로챌 수 있습니다.
2. 절대 사용해서는 안 될 위험 알고리즘 (Legacy)
현대적인 보안 기준에서 다음 알고리즘들은 사용을 지양해야 합니다.
• 해시(Hash): MD5, SHA-1 (충돌 공격에 취약하여 무결성 검증이나 비밀번호 저장에 부적합).
• 대칭키 암호화: DES, RC4 (키 길이가 너무 짧거나 알고리즘 구조적 결함이 발견됨).
• 비대칭키 암호화: 낮은 비트수의 RSA (1024비트 이하는 권장되지 않음).
3. 실무적 대응: 표준 알고리즘 채택과 키 관리
보안성을 담보하기 위해 검증된 표준 알고리즘을 사용해야 합니다.
• 대칭키 암호: AES-256 이상을 사용하며, 운영 모드는 ECB(전자 코드북) 대신 CBC나 GCM 모드를 권장합니다.
• 단방향 해시: 비밀번호 저장 시에는 SHA-256 이상의 알고리즘에 **솔트(Salt)**를 추가하거나, PBKDF2, Argon2와 같은 키 스트레칭 기술을 적용합니다.
• 비대칭키 암호: RSA는 최소 2048비트 이상을 사용합니다.
• 암호화 라이브러리: 검증된 표준 라이브러리(Java의 JCE 등)를 활용하고, 직접 암호화 알고리즘을 구현하지 않습니다(CWE-327의 또 다른 원인).
4. CWE-327 대응 및 안전한 암호화 구현 자바 코드 예시
코멘트: 암호화에서 가장 위험한 것은 "내가 직접 만든 알고리즘"과 "오래된 표준"입니다. 보안은 창과 방패의 싸움이며, 어제의 방패가 오늘의 종잇장이 될 수 있음을 명심해야 합니다. MD5나 DES와 같은 단어가 코드에 남아있다면 즉시 현대적인 AES나 SHA-256 이상으로 교체하십시오. logger.debug()를 통해 암호화 프로세스를 기록하되, 암호화 키나 초기화 벡터(IV)와 같은 민감 정보가 로그에 남지 않도록 주의하는 것이 시큐어 코딩의 마무리입니다.
댓글 달기