IgnatiusHeo
설계단계 보안설계기준-암호연산 본문
작성일: 230630
※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.
정리 내용: 소프트웨어 보안약점 진단 가이드(145~152p)
유형 | 보안기능 |
설계항목 | 암호연산 |
설명 | 국제표준 또는 검증필 암호모듈로 등재된 안전한 암호 알고리즘을 선정하고 충분한 암호키 길이, 솔트, 충분한 난수 값을 적용한 안전한 암호연산 수행방법을 설계한다. |
보안대책 | ① 대칭키 또는 비대칭키를 이용해서 암복호화를 수행해야 하는 경우 KISA의 암호이용안내서에서 정의하고 있는 암호화 알고리즘과 안전성이 보장되는 암호키 길이를 사용해야 한다. ② 복호화되지 않는 암호화를 수행하기 위해 해시함수를 사용하는 경우 안전한 해시 알고리즘과 솔트값을 적용하여 암호화해야 한다. ③ 난수 생성 시 안전한 난수 생성 알고리즘을 사용해야 한다. |
연관된 구현단계 |
- 취약한 암호화 알고리즘 사용 https://cryptocurrencyclub.tistory.com/131 - 충분하지 않은 키길이 사용 https://cryptocurrencyclub.tistory.com/134 - 적절하지 않은 난수 값 사용 https://cryptocurrencyclub.tistory.com/135 - 부적절한 인증서 유효성 검증 https://cryptocurrencyclub.tistory.com/138 - 솔트 없이 일방향 해쉬함수 사용 https://cryptocurrencyclub.tistory.com/141 |
가. 취약점 개요
ㅇ 위 내용을 볼 때, 예상 가능한 보안 위협: 안전하지 않은 암호알고리즘을 사용한 개인키 or 민감정보 유출, 난수 예측
- 취약한 암호 알고리즘 사용: base64와 같은 인코딩함수를 사용하면 비밀번호를 안전하게 보호할 수 없다.
- 충분하지 않은 키 길이 사용: 검증된 암호 알고리즘을 사용하더라도 키 길이가 충분히 길지 않으면 짧은 시간 내 키를 찾아낼 수 있고 이를 이용해 공격자가 암호화된 데이터나 비밀번호를 복호화 할 수 있다.
- 적절하지 않은 난수값 사용: 공격자는 SW에서 생성되는 다음 숫자를 예상하여 시스템을 공격할 수 있다.
- 솔트 없이 사용하는 일방향 해시함수: 만약 비밀번호를 솔트없이 해시하여 저장한다면, 공격자는 레인보우 테이블과 같이 가능한 모든 비밀번호에 대해 해시값을 미리 계산하고 이를 이용한 전수조사로 비밀번호를 찾을 수 있게 된다.
나. 설계시 고려사항
① 대칭키 또는 비대칭키를 이용해서 암복호화를 수행해야 하는 경우 KISA의 암호이용안내서에서 정의하고 있는 암호화 알고리즘과 안전성이 보장되는 암호키 길이를 사용해야 한다.
ㅇ 암호키 관리 규칙 생성 시 고려사항
② 복호화되지 않는 암호화를 수행하기 위해 해시함수를 사용하는 경우 안전한 해시 알고리즘과 솔트값을 적용하여 암호화해야 한다.
ㅇ 해시함수는 사용 목적에 따라 메시지인증/키 유도/난수 생성용과 단순 해시(메시지 압축)/전자서명용으로 나뉘며, 사용 목적과 보안강도에 따라 선택하여 이용한다.
③ 난수 생성 시 안전한 난수 생성 알고리즘을 사용해야 한다.
ㅇ FIPS 140-2 인증을 받은 암호모듈의 난수 생성기와 256비트 이상의 시드를 사용하여 난수를 생성한다. 난수의 무작위성을 보장하기 위해 이전 난수생성 단계의 결과를 다음 난수생성 단계의 시드로 사용하는 의사난수생성기를 이용한다.
다. 진단 세부사항
① 대칭키 또는 비대칭키를 이용해서 암복호화를 수행해야 하는 경우 KISA의 암호이용안내서에서 정의하고 있는 암호화 알고리즘과 안전성이 보장되는 암호키 길이를 사용해야 한다.
ㅇ 암복호화 기능 설계 시 안전한 암호 알고리즘을 사용하도록 설계되었는지 확인
- 대칭키: SEED, ARIA, AES 등
- 비대칭키: RSA, KCDSA, ECC 등
ㅇ 암복호화 기능 설계 시 안전한 암호키 길이를 사용하도록 설계되었는지 확인
- 대칭키: 128bit 이상
- 비대칭키: 2048bit 이상
② 복호화되지 않는 암호화를 수행하기 위해 해시함수를 사용하는 경우 안전한 해시 알고리즘과 솔트값을 적용하여 암호화해야 한다.
ㅇ 복호화되지 않는 암호화 기능설계시 안전한 암호화 알고리즘을 사용하도록 설계되어 있는지 확인
- ex)SHA-2 (SHA-3는 왜 안보일까?)
ㅇ 해시함수의 보안을 강화하기 위해 솔트값(난수발생기를 이용해 생성한 안전한 난수값)을 사용하여 암호화하도록 설계되어 있는지 확인
③ 난수 생성 시 안전한 난수 생성 알고리즘을 사용해야 한다.
ㅇ 개발가이드에 안전한 난수 생성알고리즘을 사용하도록 코딩규칙을 정의하고 있는지 확인
- JAVA: java.security.SecureRandom, java.util.Random
- C: randomize(seed)
끝.
'자격 > SW보안약점진단원' 카테고리의 다른 글
설계단계 보안설계기준-중요정보 전송 (0) | 2023.06.30 |
---|---|
설계단계 보안설계기준-중요정보 저장 (0) | 2023.06.30 |
설계단계 보안설계기준-암호키 관리 (0) | 2023.06.29 |
설계단계 보안설계기준-중요자원 접근통제 (0) | 2023.06.29 |
설계단계 보안설계기준-비밀번호 관리 (0) | 2023.06.29 |