시큐어코딩
- home
- 보안소식
- 시큐어코딩
29. [보안 기능] 솔트 없이 일방향 해시함수 사용
2019.06.17 14:10
안녕하세요 지에스인포입니다.
오늘은 행안부 SW 개발보안가이드 47개 항목 중 '솔트 없이 일방향 해시함수 사용'에 대해 알아보겠습니다.
# 솔트없이 일방향 해시함수 사용 : 패스워드를 솔트(Salt) 없이 저장 할 경우, 공격자가 해시값을 계산해서 찾을 수 있는 보안 취약점
소프트웨어에서는 패스워드를 암호화 해서 저장하게 되는데요, 이 때 일방향 해시함수를 이용하여 패스워드의 해시값을 저장합니다.
여기서 일방향 해시함수란?
해시함수 : 수학적인 연산을 통해 원본 메시지를 변환하여 암호화된 메시지인 다이제스트를 생성하는 기법.
일방향성 : 원본 메시지를 알면 암호화된 메시지를 구하기는 쉽지만 암호화된 메시지로는 원본 메시지를
구할 수 없는 것.
즉, 일방향 해시함수는 무결성을 확인하기 위한 방법으로서 메시지의 내용이 변조 되지 않았다는 것을 보장하는 것인데요.
아래 그림을 보시면서 함께 이해해 보시겠습니다.
위 그림에서는 어제 만든 파일을 해시함수를 이용하여 해시 값을 구한 다음 안전한 장소에 보관합니다.
그리고 다음날 파일을 불러와서 어제와 동일한 해시함수를 적용하여 해시 값을 구한 뒤, 어제 보관 해 둔 해시 값과 비교 해 보는 것인데요. 두 값이 같다면 무결성이 보장된다고 할 수 있습니다.
이렇게 일방향 해시함수는 데이터가 변조되지 않았다는 일종의 박스 봉인씰과 같은 역할을 한다고 볼 수 있는데요! 이런 일방향 해시함수도 솔트(Salt) 값 없이 저장한다면 공격자에게 쉽게 보안 노출이 가능하다는 사실, 알고 계셨나요?
여기서 솔트(Salt)란?
: 소금(salt)을 친다 라는 의미로서, 해시함수로 도출 된 데이터에 특정한 값을 추가하여 보안성을 한층 더 강화하는 기법을 말합니다.
이렇게 솔트 값을 추가하냐 아니냐에 따라서 패스워드의 노출 가능성이 크게 차이가 나게 되는데요.
아래 그림을 보시겠습니다.
위 그림에서 보다시피 솔트 없이 해시되어 저장 된 패스워든 공격자가 해쉬함수를 역추적하여 본래의 패스워드를 찾아내기가 쉽지만, 임의의 값으로 소금을 친(adding salt) 솔트 해시함수 값에 대해서는 패스워드를 알아내기 훨신 어려운 것을 알 수 있습니다.
왜냐하면 SHA-256과 같은 일방향 해시함수의 경우, 충분한 암호화 메커니즘을 적용했다고 생각하지만, 동일한 메시지는 동일한 다이제스트를 가지게 되는 구조이므로 무작위 대입을 통한 원본 문자열의 인식가능성(recognizability)이 높기 때문입니다.
이 때 바이트 단위의 임의 문자열인 솔트를 다이제스트에 추가하여 주면, 공격자가 다이제스트 값을 알아내더라도 솔트 값이 추가 된 다이제스트를 대상으로 패스워드 일치 여부를 확인하는 것이 어렵게 됩니다.
따라서 일방향 해시함수를 사용한다고 해도, 반드시 솔트 값을 추가 해 주어야지만 진정한 보안상의 의미가 있다고 할 수 있겠습니다.
오늘은 '솔트 없이 사용하는 일방향 해시함수'에 대해 알아보았습니다.
읽어주셔서 감사하며, 다음번에도 유익한 정보와 함께 찾아뵙겠습니다.