Argon2 해시 계산기|Argon2id・Argon2i・Argon2d 지원
비밀번호 등 문자열의 Argon2 해시를 계산합니다. Argon2id・Argon2i・Argon2d 3가지 방식을 지원하며, OWASP 권장 메모리 비용・반복 횟수 프리셋도 선택할 수 있습니다. 계산은 모두 브라우저 내에서 완료되며 입력 내용은 서버로 전송되지 않습니다.
Argon2 해시 계산이란
Argon2 해시 계산은 비밀번호 같은 문자열을 입력하기만 하면 Argon2id·Argon2i·Argon2d의 세 방식 중 하나로 해시 값을 생성할 수 있는 도구입니다. 비밀번호 해시화 경진대회(PHC)의 우승 알고리즘인 Argon2는 단순한 무차별 대입 공격뿐 아니라 GPU나 ASIC 같은 전용 하드웨어에 의한 빠른 공격에도 강해, 새로 개발하는 시스템에서 비밀번호를 저장할 때의 제일 후보로 널리 쓰이고 있습니다.
해시의 강도는 메모리 비용·반복 횟수·병렬도의 세 가지 매개변수로 정해지며, 값을 키울수록 공격자의 계산 비용도 올라가지만 정규 로그인 처리에 드는 시간과 메모리도 함께 늘어납니다. 이 도구에서는 OWASP Password Storage Cheat Sheet가 권장하는 다섯 가지 조합을 프리셋으로 고르실 수 있으므로, 우선 하나를 시험한 뒤 실제로 운용할 서버의 성능에 맞추어 조정하시기를 권해 드립니다.
Argon2 해시 계산 사용 방법
- 비밀번호(문자열)를 입력합니다 해시화하고 싶은 문자열을 ‘비밀번호(문자열)’란에 입력합니다. 입력 내용은 외부로 전송되지 않습니다.
- 변형을 고릅니다 특별한 이유가 없다면 GPU 내성과 부채널 내성을 함께 갖춘 ‘Argon2id(권장)’를 골라 주세요.
- OWASP 권장 프리셋을 적용합니다 프리셋 버튼을 누르면 메모리 비용·반복 횟수·병렬도가 OWASP 권장 조합으로 자동 설정됩니다.
- 필요하면 매개변수를 개별로 조정합니다 메모리 비용(KiB)·반복 횟수·병렬도는 숫자란에서 직접 편집하실 수 있습니다. 값을 키울수록 계산 시간이 길어집니다.
- ‘해시를 계산’을 눌러 결과를 확인합니다 PHC 형식의 인코딩된 해시와 실제로 걸린 계산 시간이 표시됩니다. 복사 버튼으로 결과를 남겨 두실 수 있습니다.
더 잘 활용하기 위한 팁
- Argon2는 2015년 비밀번호 해시화 경진대회(Password Hashing Competition)우승 알고리즘으로, Argon2id가 OWASP의 현재 권장 방식입니다. 특별한 이유가 없다면 Argon2id를 선택하세요.
- 프리셋 버튼은 OWASP Password Storage Cheat Sheet가 권장하는 5가지 메모리 비용・반복 횟수 조합입니다. 메모리를 늘릴수록 GPU를 이용한 병렬 공격에 대한 저항성이 높아집니다.
- "병렬도(p)"를 늘려도 브라우저의 WebAssembly 구현에서는 실제로 병렬 처리되지 않아 계산 시간은 거의 변하지 않습니다. 병렬도에 의한 고속화는 멀티코어 서버 환경에서만 유효합니다.
- 솔트는 계산할 때마다 자동으로 생성되므로, 같은 문자열・같은 파라미터라도 매번 다른 인코딩된 해시가 출력됩니다.
- 메모리 비용을 지나치게 크게 설정하면 브라우저 탭이 일시적으로 응답하지 않을 수 있습니다. 수십 MB 정도부터 시도해 보는 것을 권장합니다.
Argon2 해시 계산의 활용 사례
신규 서비스의 비밀번호 저장 방식을 검토할 때
새로 만드는 시스템에서 비밀번호를 어떻게 저장할지 검토할 때, 실제 해시 길이와 매개변수별 계산 시간을 그 자리에서 확인하실 수 있습니다.
API 키·토큰의 안전한 보관 형식 만들기
로그인용 비밀번호에 한정하지 않고, API 키나 공유 시크릿 같은 기밀 문자열을 데이터베이스에 평문으로 두지 않고 해시화해 저장하고 싶을 때에도 쓰실 수 있습니다.
개발·테스트용 더미 해시 준비
앱을 띄우지 않고, 데이터베이스에 직접 넣을 테스트 계정용 해시 값을 여기서 생성하실 수 있습니다.
메모리 비용·반복 횟수와 계산 시간의 관계를 체감하기
매개변수를 바꾸어 몇 번 계산하고 결과의 ‘계산 시간’란을 견주어 보면, 운영 서버에 알맞은 설정을 판단하는 재료가 됩니다.
기존 시스템의 BCrypt로부터의 이행을 검토할 때
같은 문자열을 BCrypt 해시 계산으로도 생성해 출력 형식과 소요 시간을 비교하면, 이행의 판단 재료가 됩니다.
Argon2 해시 계산에 관한 용어
- Argon2id
- Argon2d와 Argon2i 양쪽의 성질을 조합한 하이브리드 방식입니다. GPU 공격에 대한 내성과 부채널 공격에 대한 내성을 함께 갖추고 있어, OWASP가 제일의 권장으로 들고 있습니다.
- Argon2i
- 메모리 접근 순서를 입력에 의존시키지 않는 방식으로, 부채널 공격(실행 시간이나 전력 소비에서 정보를 읽어 내는 공격)에 강한 반면, Argon2d보다 GPU 내성이 다소 떨어집니다.
- Argon2d
- 메모리 접근 순서를 입력에 의존시키는 방식으로, GPU나 ASIC에 의한 병렬 공격에 대한 내성이 가장 높은 반면, 부채널 공격에 약하다는 특징이 있습니다.
- 메모리 비용
- 해시 계산에 사용하는 메모리 양을 KiB 단위로 지정하는 매개변수입니다. 값을 키울수록 전용 하드웨어에 의한 병렬 공격의 비용이 올라갑니다.
- 반복 횟수
- ‘시간 비용’이라고도 하며, 내부 처리를 몇 번 되풀이할지를 지정하는 매개변수입니다. 값을 키울수록 계산 시간이 늘어나고 무차별 대입 공격에 대한 내성이 높아집니다.
- 병렬도
- 계산을 병렬로 실행하는 레인 수를 지정하는 매개변수입니다. 서버의 멀티코어 환경에서는 고속화에 기여하지만, 브라우저 위의 WebAssembly 구현에서는 효과가 없습니다.
- 솔트
- 해시화 전에 덧붙이는 무작위 값입니다. 이 도구에서는 계산할 때마다 자동 생성되므로, 같은 문자열·같은 매개변수라도 매번 다른 해시가 출력됩니다.
- PHC 형식
- Password Hashing Competition에서 정해진, 알고리즘 이름·버전·매개변수·솔트·해시 본체를 한 줄의 문자열로 묶는 인코딩 형식입니다. $argon2id$v=19$m=... 과 같은 서식이 됩니다.
자주 묻는 질문
password_verify()나 각 언어의 Argon2 검증 라이브러리로 그대로 조회할 수 있습니다. 다만 입력 내용의 취급에는 충분히 주의하세요.
여담 ― 비밀번호 해시화 경진대회와 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를 첫 번째 후보로 삼는 경우가 늘고 있습니다.