Argon2id 쉬운 설명: 매우 권장되는 강력한 패스워드 알고리즘

최근 방문자님께서 Veracrypt에 Argon2id 알고리즘이 추가된다는 소식을 댓글로 알려주셨어요. 매우 반가운 소식이죠. 하지만 Argon2id가 뭔지 모르면 가벼운 새소식 정도로 넘어갈 것입니다. 그래서 저와 같이 기본적인 보안을 공부해나가는 사람들에게 간단하게 소개해드리고자 Argon2 소개글을 작성하게 되었습니다.
저는 전문가가 아니기 때문에 오히려 제가 이해할 수 있는 수준으로 지식과 정보를 공유할 수 있어 많은 분들이 읽기 쉬우리라 생각합니다.
중간중간 제가 조금이라도 더 이해하기 위해서 정리한 내용들이 있는데 굳이 이해하고 넘어가지 않으셔도 됩니다. 대략적인 내용과 결론만 읽으셔도 충분해요.
목차
Argon2란?
Argon2는 패스워드 해싱 알고리즘 입니다. 현대 암호화, 보안 분야에서 전문가들도 강력하게 권장하는 패스워드 해싱 알고리즘 입니다. 기존에 존재하던 비밀번호 해싱 함수들의 약점을 보완하기위해 만들어졌고, GPU 시대에 맞는 보안 알고리즘을 가지고 있어서 강력 추천되는 방식입니다.
2015년에 차세대 패스워드 해싱 알고리즘 공모 Password Hashing Competition(PHC)라는 국제 보안 경진대회에서 우승하게 되면서 빠르게 자리잡았고, 2021년 9월, Argon2는 IETF(인터넷 기술 표준화 기구)에 의해 RFC 9106로 표준화되었습니다.
메모리-하드(Memory-Hard) 알고리즘은 기존의 bcrypt, PBKDF2 등 CPU-bound 해싱보다 더 우수한 방어력을 가진다고 알려져있습니다.
Argon2 Github을 참고하셔도 좋습니다.
Argon2id란?
3가지 버전이있는데 우리는 Argon2id만 알고있으면 됩니다.
- Argon2d: GPU 및 시간-메모리 트레이드오프 공격에 보호에 강합니다. data-dependent memory access 데이터 의존 메모리 접근을 사용해 병렬 공격에 더 강한 저항성을 가집니다.
- Argon2i: 측면 채널 공격(Side-Channel Attacks)에 더 강함.
- Argon2id: d와 i의 두 방식의 장점을 결합한 하이브리드 방식으로 GPU 병렬 공격과 사이드 채널 공격 모두에 강하며, 현재 표준입니다.
왜 Argon2id를 사용해야하나?

현재 널리 사용되는 bcrypt, PBKDF2도 충분히 안전하다고 할 수 있습니다. 다만 GPU, ASIC 등 ‘병렬 처리’가 가능한 장비들이 등장하면서 시간-메모리 공격 등 등의 위협에 더 제대로 대응할 수 있는 안전한 패스워드 해싱 알고리즘의 필요성이 생겼는데 여기에 적합한 것이 Argon2id 입니다.
Scrypt도 충분히 안전하지 않나?
기존 비밀번호 해싱 방식에 관해 Argon2 문서에는 아래와 같이 나와있습니다.
Problems of existing schemes: A trivial solution for password hashing is a keyed hash function such as HMAC. If the protocol designer prefers hashing without secret keys to avoid all the problems with key generation, storage, and update, then he has few alternatives: the generic mode PBKDF2, the Blowfish-based bcrypt, and scrypt. Among those, only scrypt aims for high memory, but the existence of a trivial time-memory tradeoff allows compact implementations with the same energy cost.
번역
현재 비밀번호 해싱 기법의 문제점: 비밀번호 해싱의 아주 기본적인 해결책은 HMAC(메시지 인증 코드)와 같은 키 기반 해시 함수를 사용하는 것입니다. 하지만 만약 프로토콜 설계자가 키 생성, 저장, 업데이트와 관련된 모든 문제를 피하기 위해 비밀 키 없이 해싱하는 방법을 선호한다면, 선택할 수 있는 대안은 많지 않습니다. 일반적인 PBKDF2, Blowfish 기반의 bcrypt, 그리고 scrypt가 그것입니다. 이 중에서 scrypt만이 높은 메모리 사용량을 목표로 하지만, 사소한 시간-메모리 트레이드오프(trade-off)가 존재하여 동일한 에너지 비용으로 더 작은 메모리 구현이 가능합니다.
*마지막 밑줄 친 내용은 “기존의 방식 중에서 scrypt만 유일하게 메모리 사용량을 높여서 해커의 공격을 어렵게 만들 수 있는 알고리즘인데, 약점을 이용해 메모리를 적게 사용하는 공격 방식 구현이 가능하다.“는 뜻이라고 합니다.
사용자 입장에서도 소프트웨어에서 Argon2id를 지원한다면 굳이 scrypt, bcrypt를 사용할 이유가 없어보입니다.
Argon2id 장점 정리
- 기존 해시 약점을 보완했고, 현재 가장 강력한 알고리즘
- 복호화 비용이 높다. (*해커 입장에서 더 많은 노력과 시간, 돈을 들여야 한다.)
- 유연성
- 하드웨어 및 자원이 변화해도 파라미터 재설정으로 높은 수준 유지 가능
- PHP(7.2+), Python, Go, Rust, Node.js 등 거의 모든 주요 언어 및 프레임워크에 공식 라이브러리 통합 지원
- 암호화폐 지갑 등 다양한 환경에서 실제 사용
- 많은 전문가들도 Argon2id 우선적으로 추천
OWASP Password Storage 문서에서도 Argon2id를 사용할 수 없는 경우에 scrypt를 사용하라고 권장합니다.
타 해싱 알고리즘과의 비교
알고리즘 | 공격 방어(메모리 기반) | 사이드채널 방어 | 유연성/파라미터 | 장기적 안전성 |
---|---|---|---|---|
Argon2id | 매우 강함 | 매우 강함 | 매우 높음 | 매우 높음 |
bcrypt | 약함 | 중간 | 중간 | 낮은편 |
scrypt | 강함 | 중간 | 중간 | 비교적 강한편 |
PBKDF2 | 약함 | 약함 | 낮음 | 오래됐고 취약함 |
Argon2는 무적 방패인가?
보안은 끝없는 창과 방패의 싸움입니다. “Argon2가 아무리 안전하게 설계되었더라도, 효율적으로 최적화된 하드웨어(GPU)를 사용하면 공격 속도를 크게 높일 수 있다.“고 주장하는 글도 있습니다. – Optimized Implementation of Argon2 Utilizing the Graphics Processing Unit
이 글에서는 “단순히 Argon2를 사용하는 것만으로는 안심할 수 없다. 메모리 비용(memory cost)과 시간 비용(time cost)을 충분히 높게 설정하여, 해커가 GPU로 아무리 최적화된 공격을 시도하더라도 현실적으로 불가능한 수준으로 만드는 것이 중요하다.“라는 메세지도 전달하고 있습니다.
요지는 최적화된 GPU 공격은 병렬 처리 수준을 높여서 처리 시간을 5배에서 6배 정도 단축할 수 있다는 것입니다. 반대로 생각하면 병렬 처리 공격에 강한 Argon2도 긴장해야한다는 것인데 다른 암호화 알고리즘은 더 취약해질 수 있다는 뜻 입니다.
결론은 현실적으로 가장 안전한 암호화 알고리즘인 것은 맞다. 더 안전하게 사용하려면 사용자에 맞는 충분한 설정이 필요하다. 정도로 보입니다.
이 부분의 결론은 속도를 희생하고 메모리 사용량과 반복 횟수를 높여서 공격 효율성이 좋아지더라도 충분히 방어할 수 있도록하자는 내용입니다.
설정, 사용법 예
위에서 말하는 설정은 아래의 파라미터를 이야기 합니다.
- Memory Cost: 해싱 연산에 사용하는 메모리 크기 – 기본 추천값은 65536 (64MB) 입니다.
- Time Cost: 반복 횟수(해시 처리 시간) – 반복 획수가 높을 수록 보안은 강해지고 속도는 느려집니다.
- Parallelism: 병렬 처리에 사용할 스레드 수
- Salt_Length: 솔드 길이
- Hash_Length: 해시 결과 길이
주요 옵션
옵션 | 설명 |
---|---|
-h | 사용법(help) 출력 |
-d | Argon2d 사용 |
-id | Argon2id 사용 ← 가장 권장 |
-t N | 반복 횟수 N 설정 (기본값: 3) |
-m N | 메모리 사용량을 2^N KiB로 설정 (기본값: 12 → 4MB) |
-p N | 병렬 처리할 스레드 수 설정 (기본값: 1) |
-l N | 해시 출력 길이를 N 바이트로 설정 (기본값: 32) |
-e | 인코딩된 해시만 출력 |
-r | 해시 바이트(raw)만 출력 |
보안과 성능 설정 조절 예
요구사항 | 추천 설정 |
---|---|
일반 웹 로그인 | time_cost: 3 , memory_cost: 64~128MB , parallelism: 2 |
높은 보안이 필요한 환경 | time_cost: 4~6 , memory_cost: 128~256MB , parallelism: 2~4 |
저성능 기기 (모바일 등) | time_cost: 2 , memory_cost: 32MB , parallelism: 1 |

위는 패스워드 관리자인 bitwarden 암호화 키 설정 화면입니다. 여기서도 Argon2id가 보이죠. 실제 많은 기업에서도 사용중입니다.
결론
복잡한 내용은 모두 잊어도 좋습니다.
암호학은 끊임없이 발전하고 있으며, Argon이 기존의 암호 알고리즘보다 더 발전한 것처럼 더 높은 수준의 보안 알고리즘이 나올 가능성도 당연히 있지만, 수 많은 전문가들에게 검토와 평가를 받고, IETF로부터 표준으로 채택된 이후 많은 환경에서 사용되는 과정까지 상당히 오랜 시간이 걸립니다.
그래서 결론은 “현재 시점에서 우리가 실생활에서 사용할 수 있는 비밀번호 해싱 알고리즘 중에서 Argon2id를 가장 강력하고 신뢰할 수 있는 옵션으로 추천“될 수 있다.
아직 댓글이 없습니다