# 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가 현대적 권장 방식입니다.

## 쉽게 말하면

자물쇠를 한 번 시험해 볼 때마다 큰 창고 하나를 비워야 하는 규칙을 만드는 것과 같습니다. 정상 사용자는 한 번만 열면 되지만, 수십억 번 시도해야 하는 도둑에게는 감당할 수 없는 비용이 됩니다.

---
출처: https://achivx.kr/glossary/argon2-%EC%95%84%EB%A5%B4%EA%B3%A42/ · ACHIVX 용어 사전 · 수정일 2026-10-20
