Argon2 (Memory-Hard Password Hashing Function)
Argon2는 알렉스 비류코프(Alex Biryukov), 다니엘 디누(Daniel Dinu), 드미트리 호브라토비치가 설계해 2015년 비밀번호 해싱 대회(Password Hashing Competition)에서 우승한 알고리즘입니다. 계산에 많은 메모리를 요구하는 메모리 하드(memory-hard) 함수로, GPU나 전용 칩(ASIC)을 이용한 대량 비밀번호 추측을 어렵게 만듭니다. 2021년 9월 RFC 9106(IRTF CFRG 정보성 문서)으로 규격이 공개되었습니다.
자세히 알아보기
비밀번호는 무작위 키보다 추측하기 쉬워서, 데이터베이스가 유출되면 공격자는 초당 수십억 개의 후보를 시험합니다. 일반 해시 함수(SHA-256 등)는 너무 빨라서 이 공격을 거의 막지 못합니다. Argon2는 메모리 크기(m), 반복 횟수(t), 병렬도(p)를 조절해 한 번 계산하는 데 필요한 메모리와 시간을 의도적으로 늘리며, 메모리는 칩으로 싸게 늘리기 어렵기 때문에 공격 비용이 크게 올라갑니다.
Argon2에는 세 가지 변형이 있습니다. Argon2d는 데이터에 따라 메모리 접근 위치가 달라져 GPU 공격에 강하지만 부채널에 약하고, Argon2i는 그 반대입니다. 두 방식을 섞은 Argon2id가 기본 권장이며, RFC 9106은 모든 구현이 Argon2id를 지원해야 한다고 규정합니다. 각 비밀번호마다 고유한 솔트(RFC 권장 128비트)를 사용해야 미리 계산한 표(레인보우 테이블)를 무력화할 수 있습니다.
RFC 9106의 첫 번째 권장 설정은 Argon2id, t = 1, p = 4, m = 2 GiB이고, 메모리가 부족한 환경을 위한 두 번째 권장 설정은 t = 3, p = 4, m = 64 MiB입니다. 웹 서비스용으로 OWASP Password Storage Cheat Sheet는 최소 m = 19 MiB, t = 2, p = 1(또는 같은 수준의 m = 46 MiB, t = 1, p = 1 등)을 제시합니다. 실제 값은 서버 자원과 허용 지연 시간에 맞춰 정하되, 기존 PBKDF2나 bcrypt보다 높은 공격 비용을 목표로 합니다.
블록체인·암호화폐에서는
지갑 소프트웨어와 비밀번호 관리자는 사용자가 입력한 비밀번호로 개인 키나 시드 백업을 암호화할 키를 유도할 때 Argon2id 같은 메모리 하드 함수를 사용합니다. 참고로 BIP-39는 니모닉에서 시드를 만들 때 PBKDF2-HMAC-SHA512 2048회를, Ethereum 키스토어 파일은 주로 scrypt를 사용하며, 이들은 Argon2보다 앞선 세대의 키 유도 함수입니다. 거래소 계정 비밀번호 저장에도 Argon2id가 현대적 권장 방식입니다.
쉽게 말하면
자물쇠를 한 번 시험해 볼 때마다 큰 창고 하나를 비워야 하는 규칙을 만드는 것과 같습니다. 정상 사용자는 한 번만 열면 되지만, 수십억 번 시도해야 하는 도둑에게는 감당할 수 없는 비용이 됩니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.