Etc ( 기타 )/보안

Salt 비밀번호 암호화 방법 추천. Bcrypt

노루아부지 2022. 10. 30. 22:52

레인보우 테이블 공격이 등장하며 단순한 SHA256등의 암호화 방식으로는 보안에 취약해졌습니다. 그래서 현재 소프트웨어 GS인증을 받기 위해서는 Salt 암호화가 필수인데요. Salt 비밀번호 암호화 방식의 대표인 Bcrypt를 소개합니다.

 

비밀번호 암호화에 Hash 함수를 사용하는 이유

Hash 함수는 단방향 암호화 방식입니다. 흔하게 볼 수 있는 Hash 함수는 MD5, SHA256, SHA512 등이 있습니다.

비밀번호 암호화 방식에 Hash함수를 사용하는 이유는 다음과 같습니다.

  • 복호화가 어렵다.
  • 비용이 적게 든다.(RSA에 비해)

 

Salt의 등장 배경 - 레인보우 테이블

일반적으로 Hash값은 복호화가 되지 않기 때문에 무직하게 대입을 해서 비밀번호를 찾으려고 하면 엄청난 시간이 걸립니다. 10자리 영문 소문자+숫자 조합을 초당 1억 번 대입을 하면 1년 이상 걸리는데 이 시간을 획기적으로 줄이는 게 레인보우 테이블입니다.

 

레인보우 테이블

레인보우 테이블은 해시함수를 사용하여 만들어낼 수 있는 값들을 저장한 표 입니다. 미리 만들어진 테이블에서 해시값만 대입하면 되니 훨씬 빠르게 비밀번호 탈취가 가능하게 됩니다.

 

 

 

비밀번호에 소금(Salt) 치기

이러한 레인보우 테이블 공격을 방어하기 위해서는 비밀번호에 소금을 쳐야 합니다.

비밀번호에 랜덤란 문자열인 소금(Salt)을 추가함으로써 해시된 값이 다르게 만들어서 레인보우 테이블 공격을 방어하는 것입니다.

 

사용 예시

Salt 비밀번호 암호화 방법 추천. Bcrypt

 

위와 같이 user1과 user2의 비밀번호가 동일하게 password123이라고 가정합니다. 이 비밀번호를 SHA256으로 암호화를 하면 "ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f" 입니다.

Salt 문자열은 랜덤으로 생성되며 원래 비밀번호의 앞이나 뒤에 붙여줍니다.

user1의 salt는 E1F53135E559C253, user2의 salt는 84B03D034B409D4E로 생성하여 Salt를 추가하여 SHA256을 적용하면 다음과 같습니다.

Salt 비밀번호 암호화 방법 추천. Bcrypt

 

같은 비밀번호이지만 해시된 값은 달라진 것을 볼 수 있습니다.

 

 

왜 Bcrypt인가

bcrypt란?

bcrypt는 blowfish암호화에 기반을 둔 암호화 해시 함수입니다. bcrypt 함수는 OpenBSD의 기본 암호 해시 함수입니다.

 

 

bcrypt의 구조

$2b$[cost]$[22 character salt][31 character hash]

예:

$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
 \/ \/ \____________________/\_____________________________/
Alg Cost       Salt                        Hash

여기서

  • 2a: 해시 알고리즘 식별자 (bcrypt)
  • 10: Cost factor (210 ==> 1,024 rounds)
  • N9qo8uLOickgx2ZMRZoMye: 16바이트(128비트) 솔트, base64-encoded to 22 characters
  • IjZAgcfl7p92ldGxad68LJZdL17lhWy: 24바이트(192비트) 해시, base64-encoded to 31 characters

 

이와 같이 Bcrypt로 만들어진 문자열에는 신기하게 Salt 값이 포함되어 있는 것을 볼 수 있습니다. 그래서 겉보기에는 보안에 취약해 보이는데 이게 어마 무시한 보안성을 가지고 있다고 합니다.

그리고 이렇게 암호화된 문자열에 Salt가 포함되어 있을 경우의 장점이 있습니다.

바로 데이터베이스에 Salt를 저장할 필요가 없다는 것인데요. Salt를 추가한 뒤 SHA로 암호화를 할 경우에는 비밀번호 변경을 할 때마다 Salt를 새로 생성해서 그것을 DB에 저장해야 하는 번거로움이 있습니다.

 

 

참고

 

솔트 (암호학) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

 

bcrypt - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. bcrypt 파일 암호화 유틸리티에 대해서는 블로피시 문서를 참고하십시오. bcypt는 블로피시 암호에 기반을 둔 암호화 해시 함수로서 Niels Provos와 David Mazières가 설

ko.wikipedia.org

 

728x90
loading