사용자 인증, 시스템 접근 관리, 안전한 데이터 저장과 전송 등 데이터 보안 기술은 오늘날 소프트웨어의 필수적인 요소로 자리 잡았습니다. 해시는 데이터의 무결성을 보장하여 데이터가 변경되지 않았음을 확인하고 암호화는 데이터를 외부로부터 숨기는 기밀성을 제공합니다. 그러나 데이터 보안 기술은 항상 안전을 보장하는 것은 아닙니다. 암호화 알고리즘의 처리 속도, 암호화 키의 길이, 컴퓨팅 파워 등과 같은 여러 복잡한 요소에 영향을 받습니다.
시간이 지나고 컴퓨터의 성능이 향상됨에 따라 과거에 사용된 암호화 방식들은 점점 더 취약해질 수 있습니다. 이는 보안 기술의 지속적인 개발과 업데이트가 필수적임을 의미합니다. 하지만 개발자가 항상 보안에 중점을 두고 소프트웨어를 개발하기란 쉽지 않기에 안전한 보안 도구의 사용이 권장됩니다. 이러한 도구는 코드 작성 과정에서 잠재적인 취약점을 식별하고 안전하지 않은 암호화 알고리즘의 사용을 방지하는 데 도움을 줍니다.
이번에 공유할 주제는 취약한 해시와 암호화 알고리즘 규칙에 관한 내용입니다.
1. 취약한 해시
과거 MD5와 SHA-1은 대표적인 해시 알고리즘으로 빠른 연산 속도와 간편한 사용법이 장점이었습니다. 그러나 이러한 빠른 계산 속도는 무차별 대입 공격에 취약하게 만들고 레인보우 테이블을 생성하기 쉽게 했습니다. 더욱이 2004년에 MD5와 2005년에 SHA-1이 충돌 공격에 취약하다는 사실이 드러났습니다. 충돌 공격은 서로 다른 두 입력값이 같은 해시값을 생성하는 상황을 의미하며 이는 해시의 핵심인 데이터 무결성을 보장하지 못하게 만들었습니다.
해시 충돌 문제에 대응하기 위해 많은 시스템이 SHA-2로 전환했습니다. SHA-2는 여전히 안전한 해시 알고리즘으로 평가되고 있습니다. 하지만 비교적 최근에 만들어진 SHA-3, BLAKE2, bcrypt 등과 같은 새로운 알고리즘들이 특수한 상황과 요구 사항에 더 적합한 장점을 가집니다. 이들의 주요한 이점은 미래 지향적인 암호학적 설계입니다. 시간이 지남에 따라 해시 알고리즘은 레인보우 테이블 공격 등에 취약해질 수 있는데 최신 알고리즘들은 이러한 공격에 대응할 수 있는 새로운 방식으로 설계되었습니다. 또한, 솔트(salt)를 추가하여 해싱하는 방법은 장기적인 안전성을 제공합니다.
각 해시 알고리즘은 특정 상황과 보안 요구에 맞춰 그 장점을 발휘할 수 있습니다. 예를 들어 일반 데이터의 무결성 검증에는 SHA-2나 SHA-3가 적합하고 비밀번호와 같은 민감한 정보에는 bcrypt가 적절합니다. 성능과 보안성이 모두 중요한 상황에서는 BLAKE2가 유리할 수 있습니다. 어떤 알고리즘을 선택할지는 애플리케이션의 보안 요구 사항과 목적에 따라 결정되어야 합니다.
2. 취약한 암호화 알고리즘
암호화 알고리즘의 주요 장점 중 하나는 키를 사용하는 방식입니다. 키가 안전하게 보호된다면 데이터가 노출되어도 안전을 유지할 수 있습니다. 그러나 키 자체가 취약점이 될 수도 있습니다. 특히, 키 길이가 짧으면 무차별 대입 공격에 취약해지는데 이 공격은 가능한 모든 키 조합을 시도하여 암호를 해독합니다. 컴퓨터 처리 능력의 증가로 짧은 키를 사용한 암호화는 더욱 쉽게 해독될 수 있습니다.
DES는 56비트 키를 사용하며 1998년에 무차별 대입 공격으로 처음 해독되었습니다. 오늘날 일반적인 컴퓨팅 기술로도 이를 쉽게 해독할 수 있습니다. 대표적인 비대칭 키 암호화 알고리즘인 RSA의 경우에도 1024비트 이하의 키는 현재 컴퓨팅 능력으로 해독 가능성이 있어 2048비트 이상을 사용하는 것이 권장됩니다.
KISA는 공개키 암호화 알고리즘에 대해 2030년까지는 최소 2048비트, 이후에는 최소 3072비트 이상의 키 길이를 사용할 것을 권장합니다. 이 권장 사항은 컴퓨터 성능의 발전에 따라 변경될 수 있으므로 KISA의 ‘암호 알고리즘 및 키 길이 이용 안내서’를 정기적으로 확인하여 최신 정보를 파악하는 것이 중요합니다.
3. 결론
암호화 알고리즘의 선택과 구현은 현재 디지털 보안의 핵심으로 MD5, SHA-1과 같은 오래된 해시 알고리즘들과 짧은 키를 사용하는 암호화 방식은 피해야 합니다. 보안 수준은 시간이 지남에 따라 증가하는데 이는 더 강화된 암호화 방법을 선택해야 함을 의미합니다. 국내에서는 KISA가 제공하는 암호화 관련 가이드와 시큐어 코딩에 대한 컴플라이언스를 준수하는 것이 중요합니다. 하지만 개발 과정에서 암호화 알고리즘에 대해 깊이 학습하고 가이드라인을 준수하는 것은 어려운 과제입니다. 이를 위해 취약한 알고리즘을 초기 단계에서 발견하고 개선하기 위한 SAST와 암호화 소프트웨어 구성 요소의 취약점을 관리하기 위한 SCA 사용이 권장됩니다.
