Tip! 해싱과 암호화
- 해싱과 암호화는 일상에서는 어느정도 통용되지만, 암호학적으로 본다면 차이가 있다. 가장 큰 차이는 '방향성'이다.
- 단방향, 즉 복호화가 불가능 하다는 것이고 이를 '해싱'이라 부른다. 반면에 '암호화(Encryption)'는 해싱하고는 다르다. '암호화'는 '양방향'이다. 즉, 암호화를 하면 역으로 복호화도 가능한 것이다.
Tip! 복원이 불가능한 단방향 암호화
- 단방향 암호화란 이름 그대로 한쪽 방향으로만 암호화를 한다는 의미이다. 즉, 암호화 방법은 있으나 복호화 방법은 없다는 것이다. 그래서 비밀번호를 암호화 할 때에는 거의 대부분 이 방법을 사용한다.
- 원문(평문) : 암호화되지 않은 원래의 문장
- 암호화 : 특정 알고리즘이나 방법을 이용해서 원문을 다른 문장으로 변경시키는 것
- 복호화 : 암호화 때 사용한 알고리즘이나 방법을 이용해서 암호문을 다시 원문으로 변형시키는 것
Tip! 솔트(Salt)란?
- 솔트란 해시함수를 돌리기 전에 원문에 임의의 문자열을 덧붙이는 것을 말한다. 단어 뜻 그대로 원문에 임의의 문자열을 붙인다는 의미의 '소금친다(Salting)'는 것이다.
- 이렇게 하면 설령 다이제스트(Digest)를 알아낸다 하더라도 Password 를 알아내기 더욱 어려워진다. 그리고 사용자마다 다른 Salt 를 사용한다면 설령 같은 비밀번호더라도 다이제스트의 값은 다르다. 이는 결국 한 명의 패스워드가 유출되더라도 같은 비밀번호를 사용하는 다른 사용자는 비교적 안전하다는 의미기도 하다.
- 물론 솔팅할 문자열이 간단하거나, 짧으면 큰 의미는 없어진다. 가장 효과적인 방법을 구축하려면 적어도 각 사용자별 고유의 솔트를 갖고있어야 하며 솔트의 길이는 32비트 이상이 되어야 솔트와 다이제스트를 추측하기 어렵다고 한다. 그렇기에 솔트의 경우 암호학적으로 안전한 난수 생성기를 사용하여 예측가능성을 줄여야 한다.