티스토리 뷰

웹사이트에 회원가입을 하면 비밀번호를 입력하고 로그인할 때는 설정한 비밀번호를 입력한다. 이 비밀번호가 평문(plain text)으로 저장되어 있다면 해커는 비밀번호를 즉시 알 수 있다.  그래서 비밀번호를 암호화해서 저장해야 하는데, 이때 사용하는 강력한 방법 중 하나가 바로 bcrypt 해싱이다.

bcrypt 해싱에 대해, 쉽게 비유하면

비밀번호가 "password123"이라고 해보자. 이제 암호화 해보자. 그냥 저장하면 털리니깐.

 

1.  소금(Salt) 치기 : 비밀번호에 "소금(Salt)"이라는 특별한 가루를 뿌린다. 이 소금은 매번 랜덤하게 만들어지는 값이다.

    ☞   "password123" + "소금(예: XyZ123)" = "password123XyZ123" (실제로는 훨씬 복잡한 형태로 섞인다.)

2.  여러 번 갈아 으깨기 (Key Stretching) : 소금을 친 비밀번호를 믹서기에 넣고 아주 여러 번, 아주 강력하게 갈아 으깬다. 이 과정을 여러 번 반복할수록 해커가 원래 비밀번호를 알아내기 어려워진다.
    ☞    bcrypt는 이 과정을 조절할 수 있다. "강도(Cost Factor)"를 높이면 더 여러 번 갈아 으깨서 더 안전해지지만, 시간이 더 오래 걸린다.

3.  결과물 (해시) : 믹서기에서 나온 결과물은 완전히 뭉개져서 원래 비밀번호를 알아볼 수 없는 형태가 된다. 이게 바로 "해시(Hash)"라고 한다.
    ☞    예: " \$2a\$10\$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZ.Y2zMm8G" (실제 bcrypt 해시는 훨씬 더 길다.)

비밀번호를 암호화 하는 과정을 bcrypt 해싱, 그 결과로 생성된 비밀번호를 bcrypt 해시(hash)라고 한다. 해커가 만약 중간에 해시(hash)를 가로채더라도  해시(hash)만 볼 수 있고 원래 비밀번호는 알 수가 없다.

bcrypt 해싱의 특징 (왜 좋을까?)

 - 단방향 : 해시로부터 원래 비밀번호를 알아내는 것은 거의 불가능 하다. (믹서기에서 나온 반죽으로 원래 재료를 알 수 없는 것처럼)

 - Salt 사용 : 매번 다른 소금을 사용하기 때문에, 같은 비밀번호라도 해시 값이 다르게 나온다.

 - Key Stretching : 여러 번 반복해서 해싱하기 때문에, 해커가 무차별 대입 공격(Brute-Force Attack)으로 비밀번호를 알아내기 어렵다.

 - 강도 조절 :** "강도(Cost Factor)"를 조절해서 보안 수준과 처리 속도를 조절할 수 있다.

 

bcrypt 해싱, 정리하면

 

 - 비밀번호를 안전하게 저장하는 강력한 방법 중 하나이다.

 - 소금(Salt)과 반복 해싱(Key Stretching)을 사용하여 해킹 공격을 어렵게 만든다.

 - 단방향 암호화라서 해시 값으로부터 원래 비밀번호를 알아내는 것은 거의 불가능하다.


'Project > API program' 카테고리의 다른 글

API 인증방식 중 OAuth 2.0 초보자용 설명  (0) 2025.03.20