가. 취약점 개요
사례1 : 취약한 암호알고리즘 사용
소프트웨어 개발자들은 환경설정 파일에 저장된 비밀번호를 보호하기 위하여 간단한 인코딩 함수를 이용하여 비밀번호를 감추는 방법을 사용하기도 한다. 그렇지만 base64와 같은 지나치게 간단한 인코딩 함수를 사용하면 비밀번호를 안전하게 보호할 수 없다.
사례2 : 충분하지 않은 키 길이 사용
검증된 암호화 알고리즘을 사용하더라도 키 길이가 충분히 길지 않으면 짧은 시간 안에 키를 찾아낼 수 있고 이를 이용해 공격자가 암호화된 데이터나 비밀번호를 복호화 할 수 있게 된다.
사례3 : 적절하지 않은 난수 값 사용
예측 가능한 난수를 사용하는 것은 시스템의 보안약점을 유발한다. 예측 불가능한 숫자가 필요한 상황에서 예측 가능한 난수를 사용한다면, 공격자는 SW에서 생성되는 다음 숫자를 예상하여 시스템을 공격하는 것이 가능하다.
사례4 : 솔트 없이 사용하는 일방향 해시함수
비밀번호 저장시 일방향 해시함수의 성질을 이용하여 비밀번호의 해시값을 저장한다. 만약 비밀번호를 솔트(Salt)없이 해시하여 저장한다면, 공격자는 레인보우 테이블과 같이 가능한 모든 비밀번호에 대해 해시값을 미리 계산하고, 이를 이용한 전수조사로 비밀번호를 찾을 수 있게 된다.
나. 설계시 고려사항
① 대칭키 또는 비대칭키를 이용해서 암·복호화를 수행해야 하는 경우 한국인터넷진흥원의 『암호 알고리즘 및 키 길이 이용 안내서』에서 정의하고 있는 암호화 알고리즘과 안전성이 보장되는 암호키 길이를 사용해야 한다.
② 복호화되지 않는 암호화를 수행하기 위해 해시함수를 사용하는 경우 안전한 해시 알고리즘과 솔트 값을 적용하여 암호화해야 한다.
해시함수는 사용 목적에 따라 메시지인증/키 유도/난수 생성용과 단순 해시(메시지 압축)/전자 서명용으로 나뉘며, 사용 목적과 보안강도에 따라 선택하여 이용한다.
③ 난수 생성 시 안전한 난수 생성 알고리즘을 사용해야 한다.
FIPS 140-2 인증을 받은 암호모듈의 난수 생성기와 256비트 이상의 시드를 사용하여 난수를 생성한다. 난수의 무작위성을 보장하기 위해 이전 난수생성 단계의 결과를 다음 난수생성 단계의 시드로 사용하는 의사난수생성기를 이용한다.
[테스트 문제]
문제: 소프트웨어 개발자들은 환경설정 파일에 저장된 비밀번호를 보호하기 위하여 간단한 인코딩 함수를 이용하여 비밀번호를 감추는 방법으로 base64 인코딩 함수를 사용하여 안전하게 보호한다.
정답: X
해설: base64와 같은 지나치게 간단한 인코딩 함수를 사용하면 비밀번호를 안전하게 보호할 수 없다.
문제: 보안대책을 서술하시오.
1. 안전한 암호화 알고리즘, 안전한 암호키 길이
2. 안전한 해시 알고리즘과 솔트 값 적용
3. 난수 생성 시 안전한 난수 알고리즘 사용
문제: 각 안전한 암호화 알고리즘을 3개씩 서술하시오.
대칭키 암호화 알고리즘: SEED, ARIA-128이상, AES-128이상
비대칭키 암호화 알고리즘: RSA, Elgamal, ECC
암호연산 | |
보안기능 | 취약한 암호화 알고리즘 사용 |
보안기능 | 적절하지 않은 난수 값 사용 |
보안기능 | 충분하지 않은 키 길이 사용 |
보안기능 | 부적절한 인증서 유효성 검증 |
보안기능 | 솔트 없이 일방향 해쉬 함수 사용 |