시큐어코딩
- home
- 보안소식
- 시큐어코딩
25. [보안 기능] 하드코드 된 암호화 키
2019.05.28 15:53
안녕하세요 지에스인포입니다.
어느덧 매서운 추위도 지나가고 장마가 시작되는 여름철이 되었습니다.
더웠다가 추웠다가 하는 변덕스러운 날씨 속에, 모두 감기 걸리지 말고 건강 무탈하시길 바랍니다.
오늘 알아볼 보안 취약점은 '하드코드 된 암호화 키' 입니다.
# 하드코드 된 암호화 키 : 소스코드 내에 암호화키가 하드코딩 되어 소스코드 유출시 노출 우려 및 키 변경이 용이하지 않는 보안 약점
프로그램 소스코드 내부에 하드코드 된 암호화 키를 사용하여 암호화를 수행하면 암호화 된 정보가 유출 될 가능성이 높아집니다.
소스코드 내부에 하드코드 된 암호화 키를 사용하면 암호화 된 정보가 유출 가능성이 높아집니다.
많은 SW 개발자들이 코드 내부의 고정된 암호키의 해시를 계산하여 저장하면 암호키를 악의적 공격자로부터 보호 할 수 있다고 믿고 있는데요, 그러나 일부 해시함수들이 역계산이 가능하며 무차별 대입 공격에는 취약하다는 것을 고려해야만 합니다.
따라서 암호화 수행 시 상수가 아닌 암호화 키를 사용하도록 설계해야 하며, 암호화 되었더라도 소스코드 내부에 상수 형태의 암호키를 저장하여 사용해서는 안 되는데요. 자세한 코드 예제와 함께 보시겠습니다.
위의 소스코드는 코드 내부에 암호화 키를 상수 형태로 하드코딩하였습니다.
이런 경우 악의적 공격자에게 암호화 키가 노출 될 위협이 존재합니다.
따라서 이와 같이 암호화 키를 외부 공간이나 파일에 암호화 하여 보관하는 것이 바람직합니다.
위의 소스코드에서도 암호화 된 패스워드를 상수의 형태로 코드 내부에서 사용하고 있는데요.
이 경우, 프로그램 소스가 노출된다면 패스워드도 동시에 노출이 되겠죠?
그래서 아래와 같이 코딩을 해 줘야 합니다.
위 사례는 C# 언어의 RijindaeManaged를 통한 암호화 예제코드인데요. 암호화 키가 RNGCryptoServiceProvider 라는 보안성이 강화 된 랜덤함수로부터 추출한 시드와 IV(초기벡터)를 바탕으로 생성되고 있는 것을 볼 수 있습니다.
이렇게하면 악의적 공격자로부터 암호화 키가 유출되는 보안위협을 사전에 방지 할 수 있다는 사실! 모두 아셨나요?
오늘은 여기까지입니다. 다음에 더 알차고 유익한 보안정보글로 찾아뵙겠습니다.