글모음

[ 웹 보안 ] bcrypt, crypto 본문

프로그래밍 공부/기타

[ 웹 보안 ] bcrypt, crypto

Nova_61 2023. 3. 17. 17:46
728x90
반응형

 

 

 

 bcrypt, crypto


회원가입 / 로그인 / 비밀번호 찾기 서비스를 개발하는 중에 bcrypt와 crypto 모듈이 있다는 걸 알게 되었다. 

두 모듈 모두 언뜻보면 비슷한 암호화 관련 라이브러리이지만, 각각의 용도와 특징이 달라서 정리하려고 한다.

 

[ bcrypt ] 

bcrypt는 Blowfish(블로피시) 암호를 기반을 둔 암호화 해시 함수이다.

주로 비밀번호와 같은 민감한 정보를 암호화할 때 사용되고, 입력값을 고정된 길이의 출력값으로 변환해 준다.

이때, 입력값에 약간의 변화가 생겨도 출력값이 전혀 다르게 나오는 특징이 있어서 회원가입시 토큰 비교에도 사용된다.

 

입력값을 여러 번 반복해서 암호화하기 때문에 보안성이 매우 높다는 장점이 있지만, 안전한 암호화를 위해 암호화 속도가 느리다는 단점이 있음

 

[ crypto ] 

crypto는 다양한 암호화 알고리즘을 제공하는 라이브러리.

bcrypt와 달리, 암호화의 범위가 넓어서 인증서나 키 관리 등에서 사용된다. (대칭키 암호화, 비대칭키 암호화, 해시 함수 등)

bcrypt와 달리 암호화 속도가 빠르다는 장점이 있다.

 


[ 어떤게 적합할까? ]

두 라이브러리는 각각의 사용 용도와 특징이 있으므로, 암호화 방식을 선택할 때에는 해당 용도에 맞게 선택해야 한다.

 

< 1. 비밀번호 찾기( 리셋 ) >

비밀번호 리셋 토큰의 목적은 일시적으로 사용자 인증을 제공하고, 비밀번호를 재설정하는 것이다. 이때는 crypto 모듈보다는 bcrypt를 쓰는 게 낫다고 한다.

1. 무작위 토큰 생성

crypto 모듈은 무작위 바이트를 생성하는 것이 쉽워서 고유한 임시 토큰도 빠르게 생성할 수 있다.

반면, bcrypt는 원래 비밀번호 해싱을 목적으로 설계되었기 때문에 무작위 토큰 생성에는 최적화되어 있지 않음

2. 토큰 길이

crypto 모듈을 사용하면, 생성된 토큰의 길이를 쉽게 조절할 수 있어서 사용자에게 보내는 이메일 링크를 간결하게 유지할 수 있음.

반면, bcrypt로 생성된 토큰은 일반적으로 길고 복잡한 문자열로 인해 비밀번호 찾기 시에는 사용자가 이용하게 어렵다.

3. 처리 속도: 비밀번호 해싱에 사용되는 bcrypt는 의도적으로 느리게 처리되도록 설계되어있음.

언뜻 들으면 이상하게 들리지만 비밀번호를 무차별 대입 공격(brute-force attack)으로부터 보호하기 위해서 느리게 설계되었다.

그래서 임시 토큰 생성을 하는 경우에는 빠른 처리 속도를 가진 crypto 모듈을 쓰는 게 낫다.

 

< 2. 회원 가입 시 비밀번호 저장 및 서버와 토큰 비교 >

해싱 알고리즘: bcrypt는 원래 비밀번호 해싱을 위해 설계된 알고리즘이며, 그 결과로 보안적으로 강력한 해시를 생성합니다. 반면, crypto 모듈은 여러 암호화 작업을 수행할 수 있는 범용 라이브러리이므로, 비밀번호 해싱에 특화되지 않았음

솔트(Salt) 사용: bcrypt는 자동으로 솔트를 생성하고 해시에 포함시켜 공격자가 미리 계산된 해시 테이블(레인보우 테이블 등)을 사용하는 것을 방지한다. 이 기능은 비밀번호 보안에 중요한 역할을 한다.


[ 결론 ]

bcrypt와 crypto는 각각 암호화에 특화된 라이브러리이다. 비슷해 보이지만 bcrypt는 보안성이 높고, 주로 비밀번호 등 민감한 정보를 암호화하는 용도로 사용되는 반면, crypto는 다양한 암호화 알고리즘을 제공하며, 주로 인증서나 키 관리 등에서 사용된다.

나 같은 경우엔 회원가입 시에 비밀번호 해싱, 백엔드에서 토큰을 비교하기 위해서는 bcrypt(bcrypt.js)를 썼고

비밀번호 리셋 토큰 생성과 같이 무작위 문자열이 필요한 경우에는 crypto를 사용했다.

728x90
반응형
Comments