Argon2 해시 계산기|Argon2id・Argon2i・Argon2d 지원

비밀번호 등 문자열의 Argon2 해시를 계산합니다. Argon2id・Argon2i・Argon2d 3가지 방식을 지원하며, OWASP 권장 메모리 비용・반복 횟수 프리셋도 선택할 수 있습니다. 계산은 모두 브라우저 내에서 완료되며 입력 내용은 서버로 전송되지 않습니다.


Argon2 해시 계산 팁

  • Argon2는 2015년 비밀번호 해시화 경진대회(Password Hashing Competition)우승 알고리즘으로, Argon2id가 OWASP의 현재 권장 방식입니다. 특별한 이유가 없다면 Argon2id를 선택하세요.
  • 프리셋 버튼은 OWASP Password Storage Cheat Sheet가 권장하는 5가지 메모리 비용・반복 횟수 조합입니다. 메모리를 늘릴수록 GPU를 이용한 병렬 공격에 대한 저항성이 높아집니다.
  • "병렬도(p)"를 늘려도 브라우저의 WebAssembly 구현에서는 실제로 병렬 처리되지 않아 계산 시간은 거의 변하지 않습니다. 병렬도에 의한 고속화는 멀티코어 서버 환경에서만 유효합니다.
  • 솔트는 계산할 때마다 자동으로 생성되므로, 같은 문자열・같은 파라미터라도 매번 다른 인코딩된 해시가 출력됩니다.
  • 메모리 비용을 지나치게 크게 설정하면 브라우저 탭이 일시적으로 응답하지 않을 수 있습니다. 수십 MB 정도부터 시도해 보는 것을 권장합니다.

자주 묻는 질문

새로 개발하는 시스템이라면 Argon2id가 첫 번째 후보입니다. OWASP도 현재는 Argon2id를 최우선 권장 방식으로 제시하고 있습니다. 다만 기존 시스템에서 BCrypt를 사용 중이라면 이전 시 해시 재계산(다음 로그인 시 재해시화 등)이 필요하다는 점에 주의하세요.

Argon2d는 GPU 공격에 대한 저항성이 가장 높은 대신 사이드 채널 공격에 취약하고, Argon2i는 그 반대의 성질을 가집니다. Argon2id는 두 설계를 결합한 하이브리드 방식으로, 특별한 이유가 없다면 이 방식을 선택하는 것이 권장됩니다.

이 도구의 프리셋 버튼은 OWASP Password Storage Cheat Sheet가 권장하는 5가지 패턴입니다. 서버에서 실제로 사용할 경우, 해시 1회 계산에 100〜500ms 정도 걸리는 설정을 기준으로 사용 가능한 메모리와 상의하며 조정하세요.

네. 표준 Argon2 알고리즘을 사용하므로 PHP의 password_verify()나 각 언어의 Argon2 검증 라이브러리로 그대로 조회할 수 있습니다. 다만 입력 내용의 취급에는 충분히 주의하세요.

아니요. 해시 계산은 모두 브라우저 내 WebAssembly에서 완료되며, 입력 내용이 외부로 전송되는 일은 전혀 없습니다.
ツールくん

여담 ― 비밀번호 해시화 경진대회와 Argon2 탄생 배경

Argon2는 2013년부터 2015년에 걸쳐 개최된 "비밀번호 해시화 경진대회(Password Hashing Competition, PHC)"에서 24건의 응모작 중 최우수 알고리즘으로 선정되었습니다. BCrypt(1999년)나 PBKDF2(2000년)같은 기존 방식이 안고 있던 "GPU・ASIC 등 전용 하드웨어에 의한 고속 무차별 대입 공격에 취약하다"는 약점을 극복하기 위해, 계산에 대량의 메모리를 요구하는 설계가 채택되었습니다.

Argon2에는 3가지 방식(Variant)이 있습니다. Argon2d는 GPU 공격에 대한 저항성을 최대화하지만 사이드 채널 공격에 취약하며, Argon2i는 사이드 채널 공격에 강하지만 GPU 저항성이 다소 떨어집니다. Argon2id는 이 두 가지 성질을 결합한 하이브리드 방식으로, OWASP를 비롯한 많은 보안 단체가 비밀번호 저장의 첫 번째 선택지로 권장하고 있습니다.

PHP는 7.2 이상에서 password_hash() 함수에 PASSWORD_ARGON2ID 상수를 지정하는 것만으로 Argon2id 해시를 생성할 수 있습니다. Node.js・Python・Ruby 등 주요 언어에도 공식・준공식 라이브러리가 마련되어 있어, 새로 개발하는 시스템에서 비밀번호를 저장할 때 BCrypt보다 Argon2id를 첫 번째 후보로 삼는 경우가 늘고 있습니다.