Bycrypt는 현업에서 가장 많이 사용한다고 한다. 나도 종종 사용했는데 많은 알고리즘 중에 이것이 선택되고 있는지 알아보고 기록해두려고 한다.
bcrypt?
1999년 USENIX에서 발표한 Blowfish 암호를 기반으로 Niels Provos와 David Mazières가 설계한 단방향 해싱 함수라고 한다.
단방향 해시 함수?
해시 함수는 입력값을 문자와 숫자를 임의로 나열한 일정한 길이의 다이제스트(Digest) 형태로 변환시켜준다. 다이제스트란, 해시 함수를 통해 생성된 암호화된 메시지이다. 이를 단방향으로 암호화하고 복호화는 불가능해 원본을 알 수 없게 하는 것이 단방향 해시이다. 패스워드를 바로 데이터베이스에 저장하지 않고 다이제스트를 저장하는 것이 보편화되었다.
salting과 키 스트레칭을 구현한 해시 함수 중 대표적인 함수라고 한다.
Algorithm : 알고리즘 식별자. '$2a$'는 bcrypt를 뜻한다
Cost factor : 키 스트레칭한 횟수. 2^n으로 위의 경우 2^10=1024이다
Salt : 128비트 솔트, 22자 base64로 인코딩
Hash : salting과 키 스트레칭 후 해시 값
bcrypt에서 검증 : 비밀번호가 동일한지 검증하기 위해 입력된 비밀번호에 salting, 키 스트레칭을 해서 저장된 bcrypt 문자열과 비교한다.
왜 bcrypt를 사용하는가?
bcrypt 왜에도 SHA-2, PBKDF2, Scrypt 등이 있다. 여기서는 다루지 않을 거다.
여러 보안 관련 글을 보면 SHA를 암호 해싱에 사용하는 암호화 함수들은 GPU를 이용한 공격에 취약하다고 한다. 또한 많은 메모리를 필요로 하지 않는 점을 문제로 지적한다.
이는 SHA가 보안에 문제가 있거나 아니면 bcrypt가 정말 뛰어나서가 아닌 SHA가 GPU 연산에 유리한 32비트 논리 및 산술 연산만 사용하기 때문에, 공격자가 빠른 연산으로 공격을 할 수 있기 때문이라고 한다.
Bcrypt 설계자들은 이런 문제로 SHA가 아닌 Blowfish를 이용하여 구현하였다고 한다.
암호해독을 완전히 막을 수 있는 것이 아니라 공격자의 속도를 늦출수록 또는 방어자는 좀 더 느리게 설계된 암호화 방식에 의존하는 것이 낮다고 생각하는 것이다.
참고
https://velog.io/@nameunzz/%EB%8B%A8%EB%B0%A9%ED%96%A5-%ED%95%B4%EC%8B%9C-%ED%95%A8%EC%88%98
'Backend > 보안' 카테고리의 다른 글
[SSL] Nginx에 SSL 인증서 적용 (Let's Encrypt) (0) | 2022.07.08 |
---|---|
[SSL] certbot을 이용한 Let's Encrypt SSL 인증서 자동 갱신 (0) | 2022.07.08 |
[SSL] Certbot으로 SSL 무료 인증서 발급 (0) | 2022.07.08 |