해시 함수가 서로 다른 두개의 입력값에 대해 동일한 출력값을 내는 상황
무한한 가짓수의 입력값을 받아 유한한 가지수 (해시의 비트수에 따라 다릅니다) 의 출력값을 내기 때문에 절대로 충돌을 피할 수 없습니다. (비둘기 집 원리)
암호화 해시는 계산을 통해 임의의 충돌을 찾아내는것이 불가능해야 합니다.
충돌이 발견된 알고리즘을 더이상 사용하는 것은 문제가 됩니다.
md-5 알고리즘은 휴대폰으로 30초 내외의 시간으로 해시 충돌을 만들 수 있고,
sha-0, sha1 알고리즘은 싱글CPU 는 6500년, 싱글GPU의 경우 110년 의 시간에 걸쳐 계산하여 알아낼 수 있습니다. 컴퓨터가 더욱 발전되고 있는 지금, 더욱 장벽은 낮아지겠죠.
암호화는 암호화, 복호화를 할 수 있기에 양방향입니다.
해시는 암호화는 가능하지만 복호화가 불가능합니다. 단방향입니다.
해싱은 대조는 가능하기 때문에 비밀번호 저장과, 로그인 시 많이 사용되고 있습니다.
로그인이 되면 해당 해싱은 다시 암호화가 되어 저장됩니다.
2018년 페이스북에서는 비밀번호를 암호화하지 않은 채로 평문으로 보관(링크)해왔다고 밝혔습니다.
이것은 보안상 위험한 행위이며, 개인정보 보호에 가장 중요한 부분입니다.
해시에 의해 암호화된 데이터를 이야기합니다.
단방향 해시함수는 다이제스트를 복호화할 수 없습니다. (원본 데이터를 구할 수 없습니다)
생일 문제(Birthday problem) 은 사람이 임의로 모였을 때 그중에 생일이 같은 두명이 존재할 확률을 이야기합니다.
생일이 가능한 가지수는 366개이고, 367명 이상인 경우 비둘기집 원리에 의해 생일이 같은 두명이 반드시 존재하며 23명 이상이 모인다면 그중 2명이 생일이 같을 확률은 1/2를 넘습니다.
이를 통해 암호학적 해시 결과가 변화하지 않는 다는 점을 이용하여 만든 생일 공격(해시 충돌을 이용) 을 주의해야 합니다.
생일 공격과 같은 방법을 피하기 위해 임의의 문자열을 덧붙이는 방법이 솔트입니다.
이렇게 하면 다이제스트를 알더라도 password를 알아내기 더욱 어려워집니다. 사용자마다 다른 salt 를 사용하면 같은 비밀번호라고 해도 다이제스트의 값이 달라져 유추하기 어려워집니다.