Bcrypt로 암호화하기

isTuna·2021년 3월 17일
0

Web 개발

목록 보기
14/19
post-thumbnail

프로젝트를 하면서 회원가입이나 로그인을 위해 암호화가 필요했습니다. 그럴 때 사용되었던 Bcrypt가 정확히 어떤 것인지, 그리고 어떤 장단점을 가지고있는지 알아보겠습니다.

Bcrypt

BcryptNiels ProvosDavid Mazières가 만든 단방향 해싱 함수입니다. 사용자의 암호를 저장할 때 Text 그대로 DB에 저장하면 범죄나 마찬가지라고 한다. 그러면 우리는 저장할 때 Text를 변환해줘야합니다. 여기서 변환하는 것을 Hashing한다고 합니다. 즉, Bcrypt는 원본 Text를 수학 식을 이용해서 변환해줍니다. 그렇게 변환된 결과는 Digest라고 합니다.

단방향 해시 함수

단방향 해시 함수는 원본 Text를 알면 암호화된 결과를 알기 쉽지만, Digest를 통해 원본을 얻을 수 없습니다. 이 특정이 단방향 해시 함수로 만들어 줍니다. 그렇지만 동일한 Text가 항상 동일한 Digest를 만든다면, 공격자가 Digest 목록을 탈취해서 미리 확보한 Digest 목록과 비교해서 원본 Text를 역추적할 수 있습니다. 이러한 공격 기법을 Rainbow attack이라고 합니다.

또한 단방향 해시 함수는 속도가 빠르다는 장점이 있지만 이 장점으로 인해 해커는 매우 빠른 속도로 임의의 문자열로 비교할 수 있다. 그래서 오히려 사용자보다 공격자에게 더 편의성을 제공한다고 한다.

그렇지만 단방향 해시 함수를 보완하면 좋은 암호화 기법이 될 수 있습니다.

Salting

SaltDigest를 생성할 때 추가되는 바이트 단위의 무작위 문자열입니다. 그리고 이런 Salt를 원본에 붙여서 해싱하는 것을 Salting라고 합니다. 아래의 그림을 보면 쉽게 이해할 수 있습니다.

SaltDigest는 둘이 함께 DB에 저장됩니다. 또한 Salt가 32 바이트 이상 길어야 공격자가 추적하기 힘들다고 합니다. 첨언을 하면 이렇게 Salt가 추가되면 큰 리스트의 비밀번호를 추적하는데 어려워진답니다. 그러므로 Ranbow table가 무력화 된다고 합니다.


profile
청소연구소 개발자 (2021. 05~ )

0개의 댓글