티스토리 뷰
웹사이트에 회원가입을 하면 비밀번호를 입력하고 로그인할 때는 설정한 비밀번호를 입력한다. 이 비밀번호가 평문(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 |
---|
- Total
- Today
- Yesterday
- Google sheet
- 주택청약제도
- 티스토리챌린지
- vscode 구글시트 연동
- Selenium
- chrome버전
- 주택청약
- notebooklm
- GitHub
- This version of ChromeDriver only supports Chrome version
- 고양장항신혼희망타운
- 오블완
- VSCode
- kc인증
- 청약제도
- 버전제어
- 무주택세대구성원
- Git
- Python
- 청약통장
- 구글시트
- 챗gpt
- 옵시디언
- scraping
- IMPORTRANGE
- chatGPT
- chromedriver버전오류
- OpenAI
- model context protocol
- 소스제어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |