반응형
비밀번호를 보호하는 방식은 크게 **'단방향 암호화(Hashing)'**와 **'양방향 암호화(Encryption)'**로 나뉩니다.
BCrypt는 단방향 암호화의 대표적인 기술입니다. 전반적인 개념과 원리를 확인하고 갑니다.
1. 양방향 암호화 (Two-way Encryption)
- 개념: 자물쇠와 열쇠가 있는 방식입니다. 원본 데이터를 암호화한 뒤, '비밀 키(Key)'를 가지고 있으면 언제든 다시 원본 데이터로 복호화할 수 있습니다.
- 대표 알고리즘: AES-256, RSA
- 주요 용도: 주민등록번호, 계좌번호, 이메일 주소 등 **"나중에 시스템이 원본 데이터를 꺼내보아야 하는 경우"**에 사용합니다.
- 비밀번호에 쓰지 않는 이유: 만약 해커가 데이터베이스와 함께 '비밀 키(Key)'까지 탈취한다면, 모든 유저의 비밀번호를 평문으로 풀어서 볼 수 있기 때문에 보안에 치명적입니다.
2. 단방향 암호화 (One-way Hashing)
- 개념: 고기를 다지는 기계(믹서기)와 같습니다. 고기를 넣고 갈아버리면(해싱) 형태를 알아볼 수 없는 상태가 되며, 무슨 수를 써도 다시 원래의 고기(평문)로 되돌릴 수 없습니다.
- 대표 알고리즘: SHA-256, BCrypt, Argon2
- 주요 용도: 사용자의 비밀번호를 저장할 때 절대적인 표준으로 사용됩니다.
- 작동 원리:
- 유저가 회원가입할 때 0000을 입력하면, DB에는 이를 갈아버린 e5b2... 라는 해시값만 저장합니다. (서버 관리자조차 진짜 비밀번호를 모릅니다.)
- 유저가 로그인할 때 0000을 입력하면, 시스템이 이를 다시 똑같이 갈아서 e5b2...를 만듭니다.
- 방금 만든 해시값과 DB에 저장된 해시값이 일치하는지만 비교하여 로그인을 승인합니다.
💡 그렇다면 프로젝트에 쓰인 "BCrypt"는 무엇이 특별할까?
과거에는 SHA-256 같은 단순 해시를 썼으나, 컴퓨터 성능이 좋아지면서 해커들이 "1부터 999999까지 미리 다 암호화해두고 엑셀(레인보우 테이블)로 만들어두어 대조하는 방식"으로 비밀번호를 뚫기 시작했습니다. 이를 막기 위해 나온 것이 BCrypt입니다.
BCrypt의 강력한 무기 2가지는 다음과 같습니다.
- 솔팅 (Salting - 소금 치기) 비밀번호를 암호화하기 직전에 임의의 난수(Salt)를 앞뒤로 덧붙입니다.
- A유저의 0000 + Salt(1x8c) => 해시값: $2a$10$abcde...
- B유저의 0000 + Salt(9f2z) => 해시값: $2a$10$xyz12...
- 이 때문에 비밀번호가 똑같아도 DB에 저장되는 암호문은 매번 다르게 생성되어 해커의 '미리 만들어둔 엑셀 대조법'을 무력화시킵니다.
- 키 스트레칭 (Key Stretching - 암호화 늦추기) 암호화 연산 속도를 일부러 엄청나게 느리게 만듭니다. $2a$10$ 에서 10이 의미하는 것은 암호화를 2의 10승(1,024번)이나 반복했다는 뜻입니다. 해커가 초당 수십 억 개의 암호를 대입(Brute-force)하려고 해도, 한 번 대입할 때마다 0.1초씩 걸리게 만들어 사실상 뚫는 것을 불가능하게 만듭니다.
요약하자면, 백오피스 프로젝트는 비밀번호가 유출되더라도 해커가 원본을 알아낼 수 없고, 무차별 대입 공격도 방어할 수 있는 매우 안전한 표준 방식(BCrypt)을 도입하여 시스템을 구축해 둔 상태입니다!
반응형
'system_fundamentals > security_cryptography' 카테고리의 다른 글
| CIA Triad (기밀성/무결성/가용성) (0) | 2026.05.13 |
|---|---|
| 인터넷은 왜 기본적으로 위험한가 (0) | 2026.05.13 |
| 암호화는 왜 필요한가 (0) | 2026.05.13 |
| Salt는 왜 필요한가 (0) | 2026.05.13 |
| 암호화 학습목차 Index (0) | 2026.05.13 |
댓글