자격/SW보안약점진단원

설계단계 보안설계기준-암호연산

Ignatius Heo 2023. 6. 30. 16:42

작성일: 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 민감정보 유출, 난수 예측

  1. 취약한 암호 알고리즘 사용: base64와 같은 인코딩함수를 사용하면 비밀번호를 안전하게 보호할 수 없다.
  2. 충분하지 않은 키 길이 사용: 검증된 암호 알고리즘을 사용하더라도 키 길이가 충분히 길지 않으면 짧은 시간 내 키를 찾아낼 수 있고 이를 이용해 공격자가 암호화된 데이터나 비밀번호를 복호화 할 수 있다.
  3. 적절하지 않은 난수값 사용: 공격자는 SW에서 생성되는 다음 숫자를 예상하여 시스템을 공격할 수 있다.
  4. 솔트 없이 사용하는 일방향 해시함수: 만약 비밀번호를 솔트없이 해시하여 저장한다면, 공격자는 레인보우 테이블과 같이 가능한 모든 비밀번호에 대해 해시값을 미리 계산하고 이를 이용한 전수조사로 비밀번호를 찾을 수 있게 된다.

 

나. 설계시 고려사항

 

대칭키 또는 비대칭키를 이용해서 암복호화를 수행해야 하는 경우 KISA의 암호이용안내서에서 정의하고 있는 암호화 알고리즘과 안전성이 보장되는 암호키 길이를 사용해야 한다.

  ㅇ 암호키 관리 규칙 생성 시 고려사항

 

 

암호 알고리즘 안전성 유지기간 및 최소 키길이 권고(출처: 소프트웨어 보안약점 진단 가이드 2021, 행정안전부·KISA)

 

국내외 사용 권고 알고리즘(출처: 소프트웨어 보안약점 진단 가이드 2021, 행정안전부·KISA)

 

복호화되지 않는 암호화를 수행하기 위해 해시함수를 사용하는 경우 안전한 해시 알고리즘과 솔트값을 적용하여 암호화해야 한다.

  ㅇ 해시함수는 사용 목적에 따라 메시지인증/키 유도/난수 생성용과 단순 해시(메시지 압축)/전자서명용으로 나뉘며, 사용 목적과 보안강도에 따라 선택하여 이용한다.

 

보안강도에 따른 메시지인증/키유도/난수생성용 해시함수 분류(출처: 소프트웨어 보안약점 진단 가이드 2021, 행정안전부·KISA)
보안강도에 따른 단순해시/전자서명용 해시함수 분류(출처: 소프트웨어 보안약점 진단 가이드 2021, 행정안전부·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)

 

 

 

 

 

끝.