이전 글 [인증과 인가 (bcrypt, JWT)]에서 bcrypt 라이브러리를 활용한 유저 패스워드 암호화에 대해 다뤘었다.
이번 글에선 암호화 tool에는 어떤게 있고 무슨 차이가 있는지 알아보자.
단방향 해시함수의 개념이나 문제점은 이미 다룬 주제라서, 그외의 내용만 추가로 알아보았다.
PBKDF2의 기본 파라미터는 다음과 같은 5개 파라미터다.
DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)
오프라인 brute force 공격에 대해 더 강력하지만, 많은 메모리와 CPU를 사용한다.
하드웨어 구현을 하는데 크기와 비용이 훨씬 더 비싸기 때문에, 주어진 자원에서 공격자가 사용할 수 있는 병렬처리의 양이 한정적이다.
OpenSSL 1.1 이상을 제공하는 시스템에서만 작동한다.
여러 언어의 라이브러리로 제공된다.
scrypt의 파라미터는 다음과 같은 6개 파라미터다.
DIGEST = scrypt(Password, Salt, N, r, p, DLen)
Blowfish 암호를 기반으로 설계된 암호화 함수이며 현재까지 사용중인 가장 강력한 해시 메커니즘 중 하나이다.
보안에 집착하기로 유명한 OpenBSD에서 사용하고 있다. (컴퓨터 보안에 특화된 오픈 소스 운영 체제)
Salting과 Key stretching으로 Rainbow table attack, brute-force 공격에 대비할 수 있다.
C, Java를 포함한 많은 플랫폼, 언어에서 사용할 수 있다.
다만 PBKDF2나 scrypt와는 달리 bcrypt는 입력 값으로 72 bytes character를 사용해야 하는 제약이 있다.
- blowfish 암호란?
- 키(key) 방식의 대칭형 블록 암호
- 일반 목적으로 사용가능한 비특허 알고리즘
- 처리 시간과 자원 소비가 최적화되어 각종 온라인 게임의 패킷 암호화, 패킷 복호화에 주로 사용된다.
- 빠른 속도 덕분에 스마트폰 플랫폼에도 적합하다. 키가 자주 변경되지 않을때 최적의 성능을 보여준다.
- 스마트폰 메모리에서 서브키를 훔치면 취약할 수 있다.
최근 비밀번호 크래킹 기술은 GPU와 ASIC과 같은 기술을 도입하여 높은 컴퓨팅 파워를 가지고 병렬적으로 접근한다.
사용하는 목적에 맞게 파라미터 변경으로 적용이 가능하며 3 가지 종류가 있다.
암호를 해싱하는데 걸리는 시간이나 소요되는 메모리 양을 설정할 수 있게 설계되었다.
Argon2d : 더 빠르고 data-depending 메모리 액세스를 사용
Argon2i : 속도는 느리지만 data-independent 메모리 액세스를 사용
Argon2id : 혼용한 방식으로 password hashing 과 password 기반 키 유도에 적합