– 암호화에는 키가 주고 받는 놈끼리 같은 기법이 있고(대칭) 다른 기법(비대칭) 기법이 있다.

– Public/Private 키는 비대칭 기법이다. Public 키는 복호화할 때 쓰고, Private은 암호화 할 때 쓴다.

– 다이제스트는 목적이 좀 다르다. 복호화가 아에 안되고 오리지날 정보 확인하는 용도다.

– 일단 다이제스트할 본문이 매우 길면 위조하기 힘들겠지만, 패스워드 같이 짧은 단어는 부르트 포스로 꺨 수가 있다.

여기서 부르트 포스란… 00000 부터 zzzzz 까지 전부 다 대입해 보는거.. 무식한 공격법.. 그런데 언젠가는 돌다가 알아낼 수 있겠지.

– 숫자, 알파벳 조합 10자리 정도는 PC로 3-4이면 나온단다.

– 그래서 Salt를 사용한다.

여기서 Salt란,. 임의의 문자를 암호 앞이나 뒤에 넣어서 길이를 길게 하고 원래 암호에 추가 정보를 넣어서 암호화 하는 방법이란다.

– 그런데 만약에 솔트 마져도 2-4 자리라면.. 열심히 돌아서 뚫을 수 있다.

– 그래서 랜덤 솔트를 사용하는데.. 그렇게 되면 또 어느 부분이 솔드 인지 추측이 되니까 그걸 빼서 사용하는게 가능해진다.

– 그래서 이터레이션 기법을 사용한다. 이터레이션은 랜덤솔드+다이제스트를 또 다른 랜덤솔트를 사용해서 또다시 다이제스트 하는건데 이런식으로 한 100번 쯤 돌리면… 거의 부르트 포스로 꺠기에는 무쟈게 오래 걸릴테지만…. 만약에 비번이 00000 이면 도로묵..

결론. 비번은 숫자, 문자, 특수문자 조합해서 부르트 포스로 꺠기 어렵게 만들고, 암호화는 “256 bit SHA+랜덤 솔트+이터레이션”쯤하면 거의 완벽한 다이제스트가 됨.

MD5: Message Digest algorithm 5, http://ko.wikipedia.org/wiki/MD5

SHA: Secure Hash algorithm, http://ko.wikipedia.org/wiki/SHA-1