비밀번호 해싱이란 무엇인가요?
비밀번호 해싱은 계산 비용이 큰 단방향 암호 함수를 고유한 솔트와 함께 비밀번호에 적용하여, 복원 가능한 형태로 저장하지 않고도 비밀번호를 검증할 수 있는 고정 길이 다이제스트를 생성하는 관행이다.
다른 이름: password hash, password digest
비밀번호를 평문으로 저장하는 것은 소프트웨어 개발에서 가장 위험한 관행 중 하나다. 데이터베이스가 유출되면 평문 비밀번호는 즉시 계정 탈취에 사용될 수 있으며, 이는 해당 서비스뿐 아니라 사용자가 같은 비밀번호를 재사용한 다른 모든 서비스에서도 마찬가지다. 비밀번호 해싱은 평문 저장을, 비밀번호 입력값을 검증할 수는 있지만 역산해 원래 비밀번호를 복원할 수는 없는 되돌릴 수 없는 다이제스트로 대체한다.
모든 해시 함수가 비밀번호에 적합한 것은 아니다. SHA-256 같은 범용 해시 함수는 너무 빠르다. 현대의 GPU는 초당 수십억 개의 SHA-256 해시를 계산할 수 있어 무차별 대입 공격이 간단해진다. 비밀번호 해싱 알고리즘은 의도적으로 느리게 설계되어 각 해시 계산마다 상당한 CPU 시간이나 메모리, 또는 둘 다를 요구한다. 이 느림은 반복 횟수(PBKDF2), 비용 인자(bcrypt), 메모리·병렬성 설정(Argon2) 같은 매개변수로 조절할 수 있다.
비밀번호 해싱의 발전은 방어자와 공격자 사이의 군비 경쟁을 반영한다. PBKDF2(2000년)는 조절 가능한 반복 횟수를 추가했다. bcrypt(1999년)는 GPU 가속에 저항하는 고정 메모리 요구를 도입했다. scrypt(2009년)는 조절 가능한 메모리 강도를 더했다. 비밀번호 해싱 경연 대회 우승작인 Argon2(2015년)는 조절 가능한 CPU 시간, 메모리, 병렬성을 제공한다. 각 세대는 새로운 공격 방식에 대응하며, 선택은 배포 환경과 위협 모델에 따라 달라진다.
Vaulted가 비밀번호 해싱을 사용하는 방법
Vaulted는 사용자 계정이 없으므로 사용자 비밀번호를 저장하지 않는다. 그러나 비밀번호 해싱 원리는 패스프레이즈 보호 기능에 직접적으로 반영된다. 비밀에 패스프레이즈를 설정하면 비밀번호 해싱 알고리즘인 PBKDF2가 그로부터 키를 유도하는 데 사용된다. PBKDF2 반복 10만 회의 의도된 느림은 패스프레이즈에 대한 무차별 대입을 비현실적으로 만들며, 공격자가 암호문과 솔트를 손에 넣더라도 래핑된 키를 보호한다.