← 질문 목록
#331깊이 0
비밀번호를 그냥 해시하면 왜 안 되는가?
같은 비밀번호가 같은 해시가 되고, 해시 함수가 너무 빠르기 때문이다.
- 1. 공격자에서 유출된 표로: 같은 해시끼리 묶는다
- 2. 공격자에서 미리 만든 표로: 흔한 비밀번호의 해시를 대조한다
- 3. 미리 만든 표에서 공격자로: 초당 수십억 번 맞춰 본다
소금을 섞으면 첫 번째가 막힌다. 사용자마다 다른 값을 붙여 해시하므로 같은 비밀번호여도 결과가 달라진다. 미리 만든 표가 쓸모없어진다.
소금만으로는 부족하다. 한 사람을 노리고 그 사람의 소금으로 다시 만들면 된다. 빠른 함수라면 그게 오래 안 걸린다.
그래서 일부러 느린 함수를 쓴다. 반복 횟수를 올려 한 번 맞춰 보는 값을 비싸게 만든다. 메모리를 많이 쓰게 만드는 것도 같은 뜻이다.
느리게 만드는 정도는 서버가 견디는 선에서 정한다. 로그인 한 번에 수백 밀리초쯤이 흔한 기준이다.