많이 쓰이는 예를 들면
우리가 사이트에 가입할 때 입력하는 주민번호를 해슁하여 저장하게 되면
사고로 DB가 유출되더라도 회원들의 주민번호를 알아내기가 힘듭니다.
md5는 단방향으로만 암호화(not encrytion, is hashing)가 되므로 같은 주민번호를 다시 입력했을 때 나오는 해쉬값이 동일한 지 비교함으로서 주민번호의 일치여부만 확인할 수 있습니다.
이러한 점은 회원의 주민번호(개인정보)의 유출을 방지하면서도
DB상에서 각 회원의 개별성을 유지할 수 있는 해슁알고리즘의 장점입니다.
세상 어떤 것이든 완전히 안전한 것은 없듯이 해쉬함수도
고성능의 brute force , rainbow table 을 이용한 방법에는 취약합니다.
----------------------------------------
Nothing left after Nirvana.
----------------------------------------
Nothing left after Nirvana.
해쉬함수가 사용되는 예로 한가지로써 주민번호를 든 것 뿐인데
'주민번호로 회원을 구분하지 말라' 는 요지의 코멘트는 해슁알고리즘이 왜 안전한 지 묻는
쓰레드의 주제와는 별로 상관없는 얘기네요.
10^13개 미만의 조합이 되는 주민번호의 경우 해시값만 저장한다면
역해시값을 이용한 brute force 에 금방 풀려버리게 될꺼라는 정도는 쉽게 알 수 있습니다.
그래서 단순하게 13자리수의 주민번호만으로 해슁하지 않습니다.
각 회원의 비번찾기용 답이라든지 전화번호등을 같이 사용해서 입력값을 충분히 늘려주고 사용합니다.
그외 해슁할 때 salt(random 으로 생성되는 키)를 사용하여 한번 더 암호화를 해줄수도 있습니다.
암호키의 강도가 약하면 복호화 가능성이 커지는 것처럼
해쉬함수도 겨우 13자리 숫자와 같은 짧은 입력값에는 단방향성 함수라고 해도
역해쉬값 비교가 수월해지는 것은 마찬가지입니다.
그리고 주민번호처럼 unique한 값에 해슁을 적용하는 것은 타당한 방법입니다.
낮은 hash collosion 으로 1:1 매칭으로 쓸만하기에 원 값을 숨기면서 개별성을 유지하기에 좋은 수단입니다.
단지 길이가 짧아서 문제라면 보완하는 방법으로 쓰면 되는거구요.
----------------------------------------
Nothing left after Nirvana.
----------------------------------------
Nothing left after Nirvana.
요즘은 md5가
요즘은 md5가 안전하다고 하기는 힘들겠네요.
http://www.golubev.com/hashgpu.htm
http://star4u.org
http://mirror.star4u.org
암호로 무언가를
암호로 무언가를 사용하시려면 HMAC을 사용하십시오. 많은 웹 프레임워크에서 도입하고 있습니다. 있는 그대로 MD5를 사용하는 것보다 더 안전합니다.
http://en.wikipedia.org/wiki/HMAC
---- 절취선 ----
http://blog.peremen.name
hashing
많이 쓰이는 예를 들면
우리가 사이트에 가입할 때 입력하는 주민번호를 해슁하여 저장하게 되면
사고로 DB가 유출되더라도 회원들의 주민번호를 알아내기가 힘듭니다.
md5는 단방향으로만 암호화(not encrytion, is hashing)가 되므로 같은 주민번호를 다시 입력했을 때 나오는 해쉬값이 동일한 지 비교함으로서 주민번호의 일치여부만 확인할 수 있습니다.
이러한 점은 회원의 주민번호(개인정보)의 유출을 방지하면서도
DB상에서 각 회원의 개별성을 유지할 수 있는 해슁알고리즘의 장점입니다.
세상 어떤 것이든 완전히 안전한 것은 없듯이 해쉬함수도
고성능의 brute force , rainbow table 을 이용한 방법에는 취약합니다.
----------------------------------------
Nothing left after Nirvana.
----------------------------------------
Nothing left after Nirvana.
뒤집어 생각할
뒤집어 생각할 필요도 있습니다.
유출되어도 노출이 되지 않기 위해선, 서로 다른 입력에 대해 같은 결과가 많이 나오는 hash 가 유리하겠죠.
brute force 를 한다해도 원본을 알아내기 위해선 찍기 실력이 더 필요할테니까요.
따라서, 노출되면 안되는 주민등록번호에 대해 개별성이 확보되는 hash를 사용해서 저장한다는 것 자체가 넌센스입니다.
유출되면 바로 노출되니까요.
OTL
뒤집어 생각할 필요는 없습니다.
다른 주민번호를 입력해도 같은 해쉬값이 나오게 된다면 회원을 어떻게 구분하겠다는 건가요?
'서로 다른 입력에 대해 같은 결과가 많이 나오는 hash'와 같은 해쉬알고리즘은 존재하지 않습니다.
해슁알고리즘은 '단방향'입니다.
해쉬값을 얻는다하더라도 원래의 입력값(주민번호)를 알아내기는 힘듭니다.
서로 다른 입력값에 동일한 해쉬값이 나오는 해쉬충돌이 일어난 가능성은 극히 드뭅니다.
----------------------------------------
Nothing left after Nirvana.
----------------------------------------
Nothing left after Nirvana.
brute force 를
brute force 를 언급하셨던 이유가 뭔가요 ?
10^13 개의 입력에 대해 10^13 개의 서로 다른 hash 가 나오는게 보장된다면,
10^13 개의 입력을 만들어서 10^13 개의 결과를 뽑아낸다음,
그 사이트에서 가져온 개인정보와 비교하기만하면 모든 회원의 주민번호를 숫자하나 틀리지 않고 꺼낼 수 있습니다.
제 첫 댓글의 내용은 주민번호로 회원을 구분하지 말라는 것이지,
'서로 다른 입력에 대해 같은 결과가 많이 나오는 hash' 를 사용해서 회원을 구분하라는 뜻이 아닙니다.
OTL
해당 사이트에서
해당 사이트에서 해시값을 만들때 주민번호 자체만이 아닌 임의의 정보(사이트 주소의 일부라거나, 회원의 아이디라거나, 뭐 기타 등등 아무것이든)를 포함시켜서 생성하면 됩니다. 무엇을 포함하는지는 공개하지 않고요.
주민번호는 그냥 예로 든 것일뿐
해쉬함수가 사용되는 예로 한가지로써 주민번호를 든 것 뿐인데
'주민번호로 회원을 구분하지 말라' 는 요지의 코멘트는 해슁알고리즘이 왜 안전한 지 묻는
쓰레드의 주제와는 별로 상관없는 얘기네요.
10^13개 미만의 조합이 되는 주민번호의 경우 해시값만 저장한다면
역해시값을 이용한 brute force 에 금방 풀려버리게 될꺼라는 정도는 쉽게 알 수 있습니다.
그래서 단순하게 13자리수의 주민번호만으로 해슁하지 않습니다.
각 회원의 비번찾기용 답이라든지 전화번호등을 같이 사용해서 입력값을 충분히 늘려주고 사용합니다.
그외 해슁할 때 salt(random 으로 생성되는 키)를 사용하여 한번 더 암호화를 해줄수도 있습니다.
암호키의 강도가 약하면 복호화 가능성이 커지는 것처럼
해쉬함수도 겨우 13자리 숫자와 같은 짧은 입력값에는 단방향성 함수라고 해도
역해쉬값 비교가 수월해지는 것은 마찬가지입니다.
그리고 주민번호처럼 unique한 값에 해슁을 적용하는 것은 타당한 방법입니다.
낮은 hash collosion 으로 1:1 매칭으로 쓸만하기에 원 값을 숨기면서 개별성을 유지하기에 좋은 수단입니다.
단지 길이가 짧아서 문제라면 보완하는 방법으로 쓰면 되는거구요.
----------------------------------------
Nothing left after Nirvana.
----------------------------------------
Nothing left after Nirvana.
단방향함수니까요.
평문공간(입력될 수 있는 평문암호가지수: 함수로 이야기하자면 정의역)이 충분히 크고,
인코딩문장공간(MD5는 128bit이므로 2^128가지수겠죠. 함수로 이야기하자면 치역) 역시 충분히 크다면
MD5 인코딩된 문장을 가지고 원래 평문을 알아낼 수가 없습니다.
MD5와 같은 Message Authentication Code(MAC) 함수들은 단방향함수이고
역방향으로 추측할 수 있는데 도움이 될만한 방법이 없습니다.
수학적으로 이야기하자면 정의역에서 치역으로 전환될때 균일분포 무작위라고 할 수 있죠.
딴거 쓰라는 권고가
딴거 쓰라는 권고가 있습니다.
http://cwe.mitre.org/data/definitions/327.html
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
암호화 하는 함수를
암호화 하는 함수를 사용하시고 salt는 숨겨주거나 룰로 만드는 쎈쓰!
삭제
냉무
http://kldp.org/node/109911
http://kldp.org/node/109911
댓글 달기