해시/암호화

Argon2 Hash + Verify

Argon2로 비밀번호를 해시화합니다(Password Hashing Competition 우승, RFC 9106) — d/i/id 변형 지원, 기존 해시와의 대조 검증 포함.


                    

Argon2 is the Password Hashing Competition winner and the algorithm recommended in RFC 9106 for hashing passwords. Unlike bcrypt, it deliberately demands a lot of memory, not just CPU time, which makes attacks on specialized hardware (GPUs, ASICs) much harder.

How to use it

Common uses

Things to keep in mind

The memory parameter is Argon2's main defense: the more memory hashing requires, the more expensive it is for an attacker to parallelize an attack on a GPU with limited fast memory per chip.

Argon2id is recommended for most cases: Argon2i resists side-channel attacks better, Argon2d resists GPU attacks better, and id combines both approaches.

이 도구에 대한 아티클: Argon2: 이 알고리즘이 비밀번호 해싱 경진대회에서 우승한 이유

자주 묻는 질문

Argon2가 bcrypt나 PBKDF2보다 권장되는 이유는 무엇인가요?

Argon2는 Password Hashing Competition의 우승 알고리즘으로, 메모리 하드(memory-hard) 특성을 가져 GPU나 ASIC을 이용한 대규모 병렬 공격에 훨씬 강한 저항력을 제공합니다. 이런 이유로 현재 가장 권장되는 비밀번호 해싱 알고리즘입니다.

Argon2i, Argon2d, Argon2id는 어떻게 다른가요?

Argon2i는 부채널 공격(side-channel attack)에 강해 비밀번호 해싱에 적합하고, Argon2d는 GPU 크래킹에 더 강하지만 부채널에 취약합니다. Argon2id는 두 방식을 결합한 하이브리드로, 대부분의 경우 기본 권장 변형입니다.

해시 계산이 오래 걸리는데 정상인가요?

네, 정상입니다. Argon2는 메모리와 시간을 의도적으로 많이 소모하도록 설계되어 있으며, 이는 무차별 대입 공격 비용을 높이기 위한 것입니다. 메모리/반복 횟수 값이 클수록 더 안전하지만 계산 시간도 늘어납니다.

Argon2는 어떻게 표준이 되었나요?

Argon2는 2015년 Password Hashing Competition에서 우승했습니다 — 비밀번호 해싱에 가장 적합한 알고리즘을 찾기 위한 암호학자들의 공개 경연이었습니다. 이후 OWASP는 bcrypt보다 Argon2를 우선적으로 권장하고 있습니다.

병렬성 매개변수는 해싱 속도만 높이나요?

아니요, 같은 매개변수는 다중 코어 하드웨어를 가진 공격자의 무차별 대입 속도도 똑같이 높여줍니다. 따라서 병렬성은 불필요하게 늘리지 말고 실제 서버의 코어 수에 맞춰 설정해야 합니다.

아티클: 해시/암호화

Hash Generator: MD5, SHA-1, SHA-256은 서로 어떻게 다른가

MD5가 아직도 파일 무결성 검증에는 쓰이지만 비밀번호에는 쓰이지 않는 이유.

Checksum Verifier: 파일이 손상되지 않았는지 확인하는 방법

일치하는 체크섬이 파일의 무결성은 확인해주지만 누가 만들었는지는 확인해주지 않는 이유.

HMAC: 키가 있는 해시는 일반 해시와 어떻게 다른가

일반 SHA-256이 메시지 위변조를 막지 못하지만 HMAC은 막을 수 있는 이유.

Bcrypt: 비밀번호를 빠르게가 아니라 느리게 해시하는 이유

빠른 SHA-256이 비밀번호에는 나쁜 선택이고, 느린 bcrypt가 올바른 선택인 이유.

UUID: 거의 절대 중복되지 않는 식별자는 어떻게 만들어지는가

UUID v4를 수백만 대의 기계에서 충돌 위험 없이 독립적으로 생성할 수 있는 이유.

비밀번호 생성기: 비밀번호를 진짜로 강하게 만드는 것

사전 단어로 만든 긴 비밀번호가 기호와 숫자가 든 짧은 비밀번호보다 강한 이유.

AES: 대칭 암호화는 어떻게 동작하는가

AES에서 같은 키가 데이터를 암호화하고 복호화하는 이유, 그리고 이것이 비대칭 암호화와 다른 점.

Scrypt: 이 알고리즘이 왜 그렇게 많은 메모리를 필요로 하는가

scrypt가 ASIC 장치에서의 크래킹을 어렵게 만들기 위해 일부러 많은 메모리를 요구하는 이유.

TOTP: 인증 앱의 일회용 코드는 어떻게 작동하는가

Google Authenticator의 코드가 인터넷 없이 작동하고 시간만으로 서버와 동기화되는 이유.

PBKDF2: 가장 오래된 키 스트레칭 표준

PBKDF2의 권장 반복 횟수가 매년 늘어나는 이유.

X.509: SSL 인증서 안에는 무엇이 들어있는가

초록색 자물쇠를 보여주기 전에 브라우저가 사이트 인증서에서 정확히 무엇을 확인하는지.

PGP: 공개 키와 개인 키 암호화는 어떻게 작동하는가

PGP 공개 키는 자유롭게 공유할 수 있지만 개인 키는 절대 공유해서는 안 되는 이유.