주메뉴 바로가기 본문 바로가기

전자정부 누리집 로고 이 누리집은 대한민국 공식 전자정부 누리집입니다.

확대수치
글자크기 100%

개인정보 보호위원회

개인정보 지식센터 게시판 상세 테이블

개인정보 지식센터 게시판 상세테이블로 제목, 작성부서, 작성자, 작성일, 조회수, 첨부파일, 페이지 URL, 내용 등 정보를 제공

제목 해시처리한 개인정보는 개인식별이 불가능한가? 2부-해시에 대한 공격위험과 해결방안
작성부서 대변인 작성자
작성일 2024-09-30 조회수 2422
첨부파일 목록
페이지 URL

업무 현장에서 궁금해 할 만한 개인정보 관련 법,제도,정책,사례 등을 개인정보보호위원회 전문가들이 골라서 설명해드립니다. 개인정보 관련 모니터링과 사전검토가 필요한 기업에는 가이드가 되고, 개인정보에 관심이 많은 분들께는 현안, 이슈를 두루 살펴볼 수 있는 유용한 창구가 되기를 기대합니다. 소재에 관한 제언이나 그 이외의 의견은 언제든지 환영합니다. pipcpr@korea.kr 로 연락주시기 바랍니다. 



[9.30.(월). 발행] 


해시처리한 개인정보는 개인식별이 불가능한가? 



2부 - 해시에 대한 공격위험과 해결방안




 해시는 데이터를 보호하는 데 매우 유용하지만, 특정 조건에서는 여전히 취약할 수 있습니다. 특히, 레인보우 테이블 공격과 같은 기법은 해시처리된 개인정보의 보안을 위협할 수 있습니다. 

 이번 글에서는 해시에 대한 공격 위험과 이를 방어하기 위한 효과적인 대책에 대해 알아보겠습니다.



1. 해시에 대한 주요 공격방식


(1) 무차별 대입 공격 (Brute-Force Attack)


 무차별 대입 공격은 해커가 가능한 모든 입력값을 시도해 동일한 해시함수에 대입하여 해시값과 일치하는 원본 데이터를 찾아내는 방법입니다.  이 공격방식은 특히 입력값이 짧거나 제한적일 때 효과적입니다. 특히, 짧은 비밀번호나 전화번호와 같은 개인정보는 입력 가능한 값의 범위가 좁기 때문에, 해커가 빠르게 모든 조합을 시도하여 해당 해시값의 원본 데이터를 찾아낼 수 있습니다. 

 

 예를 들어, 한국의 전화번호는 일반적으로 010으로 시작하며, 나머지 8자리 숫자가 뒤따릅니다. 이는 약 1억 개의 조합만으로 010 이하의 모든 전화번호(0000-0000부터 9999-9999까지)를 표현할 수 있음을 의미합니다. 현대의 고성능 컴퓨터를 사용하면, 아주 짧은 시간 내에 1억 개의 조합을 계산해낼 수 있을 것입니다. 해커는 가능한 전화번호 조합에 대해 각각 해시값을 계산하고, 해시값을 탈취한 후 그 값에 대응하는 원본 데이터를 일일이 찾아내는 방식으로 공격을 시도할 수 있습니다. 범위가 제한적이고 일정한 패턴을 가지고 있는 주민등록번호, 자동차 번호판 등도 같은 취약성이 존재합니다. 


(2) 레인보우 테이블 공격 (Rainbow Table Attack)


 레인보우 테이블 공격은 무차별 대입 공격을 효율적으로 개선한 방식입니다. 이 공격에서는 미리 계산된 해시값과 원본 데이터의 매칭 테이블을 사용하여 해시값을 빠르게 역추적합니다. 해커는 사전에 여러 데이터를 해시 처리한 후 이를 저장해둔 테이블을 사용하여, 일치하는 해시값을 찾는 방식으로 공격을 수행합니다.

 

 레인보우 테이블 공격은 특히, 입력값이 제한적이거나 예상 가능한 경우 매우 효과적입니다. 예를 들어, 앞서 언급한 전화번호의 경우 1억 개의 가능한 조합을 미리 계산해 레인보우 테이블에 저장해둔 후, 해시값을 대조하여 원본 전화번호를 알아낼 수 있습니다. 


  (예시) 전화번호에 대한 레인보우 테이블 


입력값해시값(SHA-256)
010-0000-00008784c90d4a0106d3f67e67a3545103740560bf5347c3d947bb75d1ce81f6c590
010-0000-0001081b3f5d3cfc5e45a82fd9b0562ff459efeafb96634690a92ab482edbd904066
010-0000-00025308cfee286def13412e838ba57bbee9e912a85326fddcc4b90650cd52cd543f
......
010-1234-567 8e07c05a8e77ced5616f86ea1b549bc9756f5525441e684765f04591b18b93b34
......
010-9999-999 8f843597d4cea8b803c5a0464991d4e463fa0f9206ec7bcf0993d3812b2571175
010-9999-999 9cd87ae2a1484e24922dba3ce807d1f59b7c9b46ec3617cfaac8e465a18788f74


 만약 해커가 “e07c05a8e77ced5616f86ea1b549bc9756f5525441e684765f04591b18b93b34” 라는 해시값을 취득하였다면, 이를 미리 만들어둔 모든 전화번호 조합에 대한 레인보우 테이블에 매칭하여 해당 해시값이 “010-1234-567 8”이라는 전화번호에서 생성된 것임을 빠르게 확인할 수 있을 것입니다. 


 또한, 1억 개의 해시값을 만드는 것은 보통의 컴퓨터로도 아주 짧은 시간 내에 가능합니다. MD5나 SHA-256과 같은 해시 알고리즘은 공개되어 있는 다양한 온라인 도구나 프로그램을 사용하면, 누구나 쉽게 계산해보고 해시값을 생성할 수 있습니다. 


 즉, SHA-256 자체는 안전한 해시 알고리즘이지만 입력값이 제한된 상황에서는 해시값만으로 원본 데이터를 역추적해낼 수 있는 위험이 생기는 것입니다. 


 반면, 이메일 주소와 같은 복잡한 데이터는 입력값의 범위가 훨씬 넓어 레인보우 테이블 공격이 상당히 어려울 수 있습니다. 이메일은 구성하는 사용자명과 도메인명은 글자 수가 정해져 있지 않으며 알파벳, 숫자, 일부 특수문자를 포함한 다양한 조합을 가질 수 있으므로, 모든 가능한 조합을 레인보우 테이블로 미리 계산하는 것은 사실상 불가능에 가깝습니다. 따라서, 입력값이 길고 복잡할수록 해시값을 통해 원본을 역추적하는 것은 어려워지며, 공격 성공 확률도 크게 낮아집니다.




2. 해시공격 방어를 위한 효과적 수단 : Salt


 해시에 대한 공격에 대응하기 위한 가장 효과적인 방법 중 하나는 Salt값을 사용하는 것입니다.

 Salt는 “소금을 치다”라는 의미에서 유래한 표현으로, 해시처리 전 원본 데이터에 소금을 뿌리듯 임의의 값을 추가하여 해시값을 변형시키는 방식을 말합니다. 같은 입력값이라도 Salt값에 따라 각기 다른 해시값을 생성하도록 만드는 것입니다. 



(Salt 적용 전)

■ 전화번호:“010-1234-567 8”

■ SHA-256 해시값: “e07c05a8e77ced5616f86ea1b549bc9756f5525441e684765f04591b18b93b34”


(Salt 적용 후)

■ Salt 값: "123ABC"

■ Salt가 적용된 입력값: "123ABC010-1234-5678"

■ SHA-256 해시값: “4d5c765b3cde97653517f35859d3f31846fa5dd309bd16bef2162cc4210af6ba” 


 이처럼 Salt 값이 추가된 경우, 해시값은 완전히 달라지며 이에 따라 미리 계산된 레인보우 테이블이나 무차별 대입 공격으로는 해시값을 추출해내기가 매우 어렵게 되고 공격 성공 확률도 비교할 수 없을 정도로 낮아집니다. 해커는 Salt가 적용된 해시값을 해독하기 위해 Salt 값도 알아내야 하므로 사실상 공격을 성공시키기 매우 어려워지는 것입니다. 특히 Salt의 길이와 무작위성이 충분하다면, 해커가 해시값을 복구하는 것은 불가능에 가깝습니다. 


 실제 2012년에 발생한 링크드인(LinkedIn) 해킹 사건은 Salt 사용의 중요성을 극명히 보여줍니다. 해당 사건에서 해커들은 약 1억 6천만 개의 비밀번호 해시값을 탈취하였는데, 해커들은 레인보우 테이블 공격을 통해 SHA-1 해시 알고리즘으로 만든 상당 수의 비밀번호를 역추적할 수 있었고 이를 통해 사용자 계정에 무단 접근할 수 있었습니다. 이는 비밀번호에 Salt값을 추가하지 않았기 때문에 발생한 문제였습니다. 사건 이후, 링크드인은 다양한 보안조치와 더불어 자사 데이터베이스 안에 있는 모든 비밀번호에 Salt값을 포함하여 해시처리를 적용하였습니다.



3. 결론 : 해시의 취약점과 Salt의 중요성


 해시는 개인정보 보호에 있어 중요한 역할을 하며, 특히 데이터가 변조되지 않았는지를 확인하는 무결성 검증과 비밀번호와 같은 민감한 정보를 보호하는 데 널리 사용됩니다. 다만, 유의할 점이 있습니다. 


 첫째, 길이가 지나치게 짧거나 해시 충돌이 보고된 구식 알고리즘(예: MD5)을 사용하면 안 됩니다. 구식 알고리즘은 동일한 해시값을 가지는 서로 다른 두 데이터를 손쉽게 찾을 수 있어 보안 목적으로 권장되지 않습니다.  다만, SHA-256과 같은 비교적 안전한 해시 알고리즘을 사용하더라도, 입력값이 짧거나 형식이 표준화되어 예측 가능한 경우 레인보우 테이블 공격과 무차별 대입 공격에 취약해 원문이 역추적될 위험이 있습니다.


 둘째, 이러한 해시의 취약점을 보완하기 위해서는 Salt의 사용이 권장됩니다. Salt를 적용하면 해시값이 매번 달라지므로, 미리 계산된 레인보우 테이블이나 단순한 공격에 대한 성공률을 크게 낮출 수 있습니다. NIST, 국가정보원, KISA 등이 발표한 국내외 보안 표준·안내서에서도 해시를 Salt와 함께 사용하는 것을 권장하고 있습니다. 물론 Salt값이 유출되지 않도록 별도의 저장소에 안전하게 보관해야 함이 전제됩니다.


 요약하면, 시는 원문을 감춘 채 동일여부를 대조할 수 있다는 점에서 매우 유용하며, 무차별 대입 공격 등의 위험이 수반되는 경우는 Salt를 함께 사용하여 더 강력한 보안 체계를 구축할 수 있습니다. 

따라서, 개인정보 보호 목적으로 해시를 활용하는 경우 취약점이 보고되지 않는 안전한 해시 알고리즘을 사용하여야 하며, Salt와 같은 추가적인 보안조치를 병행하여 활용할 필요가 있겠습니다. 


개인정보보호위원회 데이터안전정책과 주문호 사무관




  • 240919_웹배너(개인정보 지식센터  해시처리한 개인정보는 개인식별이 불가능한가_1부-해시의 의의와 안전성  2부-해시에 대한 공격위험과 해결방안)-02

해당 페이지의 만족도와 소중한 의견 남겨주세요.

등록