보안 공부/소스코드 보안약점 진단

소스코드 보안약점 진단 - 충분하지 않은 키 길이 사용

H.J.World 2022. 1. 11. 10:10
728x90
반응형

소스코드 보안약점 진단 // 소프트웨어 보안약점 진단 // SW 보안약점 진단과 같이 다양한 이름으로 불리는 진단 과업 중 하나이다.

SW개발보안은 해킹 등 사이버공격의 원인인 보안약점을 SW개발단계에서 사전에 제거하고 SW 개발 생명주기의 각 단계별로 수행하는 일련의 보안활동을 통하여 안전한 SW를 개발·운영하기 위한 목적으로 적용하는 개발체계이다.

해당 내용은 KISA에서 발간하는 취약점 진단 가이드 항목을 기준으로 작성한다.

 

제2절 보안기능

보안기능(인증, 접근제어, 기밀성, 암호화, 권한관리 등)을 부적절하게 구현시 발생할 수 있는 보안 약점으로 적절한 인증 없는 중요기능 허용, 부적절한 인가 등이 포함된다.


8. 충분하지 않은 키 길이 사용

가. 개요

길이가 짧은 키를 사용하는 것은 암호화 알고리즘을 취약하게 만들 수 있다. 키는 암호화 및 복호화에 사용되는데, 검증된 암호화 알고리즘을 사용하더라도 키 길이가 충분히 길지 않으면 짧은 시간 안에 키를 찾아낼 수 있고 이를 이용해 공격자가 암호화된 데이터나 패스워드를 복호화 할 수 있게 된다.

나. 보안대책

다음의 예제는 보안성이 강한 RSA 알고리즘을 사용함에도 불구하고, 키 사이즈를 작게 설정함으로써 프로그램의 보안약점을 야기한 경우이다.

다. 코드예제

- 안전하지 않은 코드의 예 JAVA -

1: public static final String ALGORITHM = "RSA";
2: public static final String PRIVATE_KEY_FILE = "C:/keys/private.key";
3: public static final String PUBLIC_KEY_FILE = "C:/keys/public.key";
4: public static void generateKey() {
5: try {
6: final KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM);
//RSA 키 길이를 1024 비트로 짧게 설정하는 경우 안전하지 않다.
7: keyGen.initialize(1024);
8: final KeyPair key = keyGen.generateKeyPair();
9: File privateKeyFile = new File(PRIVATE_KEY_FILE);
10: File publicKeyFile = new File(PUBLIC_KEY_FILE);

 

- 안전한 코드의 예 JAVA -

공개키 암호화에 사용하는 키의 길이는 적어도 2048비트 이상으로 설정한다.

1: public static final String ALGORITHM = "RSA";
2: public static final String PRIVATE_KEY_FILE = "C:/keys/private.key";
3: public static final String PUBLIC_KEY_FILE = "C:/keys/public.key";
4: public static void generateKey() {
5: try {
6: final KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM);
7: keyGen.initialize(2048);
8: final KeyPair key = keyGen.generateKeyPair();
9: File privateKeyFile = new File(PRIVATE_KEY_FILE);
10: File publicKeyFile = new File(PUBLIC_KEY_FILE);

 

라. 진단방법

대칭키 암호알고리즘(예,AES, ARID, SEED 등)의 경우 128bit 이상, 해쉬 함수(예, SHA 등)의 경우 128bit 이상, 공개키 암호알고리즘(예, RSA, DSA 등) 2,048bit 이상(ECC의 경우, 256 이상)의 키를 사용하는지 확인한다.

다음의 예제는 보안성이 강한 RSA 알고리즘을 사용함에도 불구하고, 키 사이즈를 작게 설정함으로써 프로그램의 취약점을 야기한 경우이다.

공개키 암호화에 사용하는 키의 길이는 적어도 2048비트 이상으로 설정한다.

1: …
2: public void target() throws NoSuchAlgorithmException {
3: KeyPairGenerator keyGen = KeyPairGenerator.getInstance(“RSA”);
4: // Key generator의 불충분한 키 크기
5: keyGen.initialize(512);
6: KeyPair myKeys = keyGen.generateKeyPair();
7: }
728x90
반응형