bcrypt 에 대한 정리

안희수·2021년 6월 29일
0

TIL

목록 보기
23/26

bcrypt와 암호 해쉬함수

django 실습 프로젝트를 진행하는데 비밀번호를 bcrypt로 암호화 하는 것을 보고 궁금해졌다.
일전에 이야기 했던 적이 있지만 전에는 AES 혹은 SHA256 방식의 암호를 주로 사용하였는데
이 녀석은 대체 뭐하는 녀석이고 무슨 특징을 가지고 있는가 적어본다.

bcrpt 란 ?

bcrypt 함수는 OpenBSD 및 수세 리눅스 등의 일부 리눅스 배포판을 포함한 기타 시스템용 기본 암호 해시 함수이다.
bcypt는 블로피시 암호에 기반을 둔 암호 해시 함수로서
Niels Provos와 David Mazières가 설계하였으며 1999년 USENIX에서 발표되었다.
레인보 테이블 공격 방지를 위해 솔트를 통합한 bcrypt는 적응형 함수의 하나이다.
시간이 지남에 따라 속도 저하를 위해 반복 횟수가 증가가 수반될 수 있으므로
연산 파워의 증가에도 브루트 포스 검색 공격에 대한 저항을 유지하게 된다.

왜 SHA가 있는데 bcrypt가 탄생하게 된 것일까?

SHA의 경우는 너무 빠른 것이 오히려 단점이다.
빠른 처리속도로 인해 rainbow table 을 만들 수 있다고 하는데
이게 바로 소위 말하는 코드북이다.
최신 CPU,GPU라고 하면 SHA256을 초당 백만,천만번씩 수행할 수 있다.

이에 비해 bcrypt key setup phase 라는 일종의 막대한 전처리 요구로 느리게 만든
Blowfish 란 녀석의 특징에 반복횟수를 변수로 지정가능하게 하여 작업량 (=해싱시간) 을 조절할 수 있게 해주었는다.
원하는 만큼 속도를 조절가능한 hash 함수이다.
단방향이기 때문에 Bcrypt 인코딩 된 암호는 복호화가 불가능하고
암호화 과정에서 salt(임의의 첨가 문자열)를 이용하기 때문에
설령 복호화 하더라고 실제 암호를 해독하기 어렵다는 점이 있다.

이번 실습을 하면서 bycrpt를 처음 써보기는 했지만
해시함수의 특징을 이용해 블록체인을 개발해 보고 싶어서 그쪽으로 잠시 공부해 보 적도 있었다.
그리고 포렌식 업무를 하는 회사에도 잠시 몸 담은 적이 있었는데
그때 처음 SHA256 암호를 접해보았다.

본인이 암호화 전문가라던가 암호화 개발을 하는 사람이 아니고
응용 프로그래머이기 때문에 지나치게 깊이 알아야 할 필요는 업삳고 보지만
해시 개념은 꽤나 도움이 되곤 한다. 해시의 특징인 빠른 속도로 인해
자바에서 해시테이블을 보통 자료 검색시 많이 사용하고 배열 보다도 더 많이 쓴다.

전에 쓰던 C#은 자료구조 관련헤서는 DataTable 정도밖에 없고 Dictionary 라는 것이 있기는 하지만
대용량의 데이터를 다루기이는 확실히 좀 성능이 자바보다는 떨어진다는 느낌을 받았다.

나중에 기회가 된다면 해시 함수를 잘 적용해서 개발할 수 있는 프로젝트를 만날 수 있기를 바란다.

profile
9년차 소프트웨어 개발자 (2024년 재 개편 예정입니다)

0개의 댓글