🐢 꼬부기 LV.1 | 개념•기초/💧물대포(핵심개념)

BCrypt 개념과 구조

서화 2026. 3. 8. 23:21

비크립트(BCrypt)란

비밀번호를 안전하게 저장하기 위한 해시 알고리즘이다

그냥 문자열을 암호화해서 다시 풀어내는 구조가 아니라, 복구가 불가능한 형태로 변환하고, 로그인할 때는 같은 비밀번호인지 비교만 하는 구조이다 즉 단방향 암호화이기 때문에 복호화가 불가능하다. ( 복호화란? 암호화된 문자열을 다시 원래 문자열로 해독하는 것을 의미 )

비크립트 구조

1. 입력값: 사용자가 입력한 비밀번호
예를 들어 사용자가 abc123 같은 비밀번호를 입력한다

2. Salt 생성
비크립트는 비밀번호만 바로 해싱하지 않고, 먼저 Salt라는 랜덤 값을 붙인다
Salt는 같은 비밀번호를 쓰더라도 결과가 매번 다르게 나오게 해주는 값이다

예를 들어 두 사용자가 둘 다 abc123을 써도 Salt가 다르면 저장 결과도 다르게 나온다

이게 중요한 이유는 같은 비밀번호를 쓴 사람들을 한눈에 알아내지 못하게 하고, 미리 만들어둔 해시 테이블 공격도 막기 위해서다

3. Cost(Work Factor) 적용
비크립트는 일부러 계산을 느리게 만든다 이때 사용하는 값이 cost 또는 strength다

비밀번호 해시를 계산할 때 얼마나 많은 연산을 할지 정하는 값이고, 결과적으로 해시 강도에 영향을 주는 설정이라고 보면 된다

비밀번호 자체를 복잡하게 만드는 강도가 아니라 해시를 만드는 데 드는 계산 비용을 높여서 공격을 어렵게 만드는 강도다

예를 들어 설명하면:

  • cost가 낮다 → 해시 계산이 빠르다
  • cost가 높다 → 해시 계산이 느리다

이 느려진다는 게 중요한 이유는 로그인할 때 우리 서버도 조금 더 오래 계산하지만, 공격자가 비밀번호를 수천, 수만 개 대입하는 속도도 같이 느려지기 때문이다

cost는 쉽게 말해서 “이 비밀번호를 검사하는 데 일부러 얼마나 시간을 들이게 할 것인가”를 정하는 값이다.

4. 해시 생성
비밀번호 + Salt + Cost를 이용해서 최종 해시 문자열을 만든다 비크립트 결과값은 보통 이런 형태로 저장된다

$2a$10$abcdefghijklmnopqrstuu..............

이 문자열 안에는 단순 해시값만 있는 게 아니라 아래의 정보들을 담고있다

  • 어떤 BCrypt 버전을 썼는지
  • cost 값이 얼마인지
  • salt 값
  • 최종 해시 결과

따라서 DB에는 비밀번호 원문이 아니라 이 결과 문자열 전체가 저장된다

예시)

$2a$10$abcdefghijklmnopqrstuuD7QJQJQJQJQJQJQJQJQJQJQJQ 

대충 나누면 이렇게 볼 수 있다.

  • $2a$ → BCrypt 버전
  • 10$ → cost 값
  • abcdefghijklmnopqrstuu → salt
  • 뒤쪽 나머지 → 해시 결과

즉, salt를 따로 컬럼에 저장하지 않아도 BCrypt 문자열 안에 포함되어 있는 경우가 많다

로그인할 때 구조

로그인에서는 DB에서 원문 비밀번호를 꺼내는 게 아니다 입력한 비밀번호가 DB에 저장된 해시와 같은 지 확인하는것이다

  1. 사용자가 로그인 화면에서 비밀번호 입력 예: abc123
  2.  DB에 저장된 BCrypt 해시를 가져옴
  3.  저장된 해시 안에서 salt와 cost 정보를 읽음
  4.  사용자가 입력한 비밀번호를 같은 조건으로 다시 해싱
  5.  결과가 같으면 일치로 판단

장점

첫째, 복구가 불가능하다.
저장된 값만 보고 원래 비밀번호를 알아내기 어렵다

둘째, Salt가 자동으로 들어간다.
같은 비밀번호라도 저장 결과가 달라진다

셋째, 일부러 느리다.
공격자가 많은 비밀번호를 빠르게 대입하기 어렵다

일반 해시와 차이

예전에는 SHA-256 같은 걸로 비밀번호를 저장하는 경우도 있었는데,( SHA-256은 입력값을 256비트 고정 길이 해시값으로 변환하는 해시 알고리즘이다) 이 방식은 계산이 너무 빠르다 빠르다는 건 서비스 입장에서는 좋아 보이지만,
공격자도 엄청 빠르게 대입할 수 있다는 뜻이다

반면 비크립트는 비밀번호 저장 전용에 가깝게 설계돼서 보안상 훨씬 적합하다