bcrypt

정의
bcrypt는 비밀번호와 같은 비밀 데이터를 안전하게 저장하기 위해 설계된 암호학적 해시 함수이다. 주로 비밀번호 해싱에 사용되며, 고유한 솔트와 적응형 작업 비용을 결합하여 무차별 대입 공격(brute‑force attack) 및 사전 공격(dictionary attack)에 대한 저항성을 높인다.

개요
bcrypt는 1999년 미국의 컴퓨터 과학자 Niels ProvosDavid Mazières가 발표한 암호학 논문 “A Future‑Adaptable Password Scheme”에서 소개되었다. Blowfish 대칭키 암호 알고리즘을 기반으로 한 Eksblowfish(Expensive Key Schedule Blowfish)라는 변형을 사용한다. 입력된 비밀번호와 무작위로 생성된 128비트 솔트가 결합된 후, 지정된 라운드 수(작업 비용)만큼 반복 해시 연산을 수행한다. 작업 비용은 2ⁿ 형태의 정수(예: 2¹⁰, 2¹² 등)로 지정되며, 하드웨어 성능이 향상됨에 따라 비용 파라미터를 증가시켜 해시 계산 시간을 조정할 수 있다.

어원/유래
“bcrypt”라는 명칭은 Blowfish 암호와 “crypt”(암호화)라는 단어의 결합에서 유래하였다. Eksblowfish 알고리즘을 이용해 비밀번호를 암호화한다는 의미를 담고 있다. 최초 제안자는 위 논문에서 이 방식을 “bcrypt”라고 명명하였다.

특징

특징 내용
솔트 사용 128비트 무작위 솔트를 자동으로 생성·저장하여 동일 비밀번호라도 서로 다른 해시 값을 만든다.
작업 비용 조정 비용 파라미터를 2ⁿ 형태로 지정해 해시 연산 횟수를 조정함으로써 계산 비용을 조절한다.
적응형 보안 하드웨어 성능이 향상될 경우 비용 파라미터를 증가시켜 기존 해시의 보안 수준을 유지한다.
키 스트레치(key stretching) 동일 비밀번호에 대해 여러 차례의 해시 연산을 수행해 공격자가 단일 연산당 얻는 정보를 감소시킨다.
표준화 여러 프로그래밍 언어와 라이브러리(예: OpenBSD, PHP, Python, Node.js 등)에서 표준 구현을 제공한다.
출력 형식 $2a$, $2b$, $2y$ 등으로 시작하는 60문자 문자열 형태(버전 및 비용 정보를 포함)로 저장된다.

관련 항목

  • Blowfish: bcrypt가 기반으로 하는 대칭키 블록 암호 알고리즘.
  • PBKDF2: 비밀번호 기반 키 파생 함수, bcrypt와 유사한 목적을 가진 다른 표준.
  • scrypt: 메모리 비용을 추가로 고려한 비밀번호 해시 함수.
  • Argon2: 2015년 비밀번호 해시 경연(Password Hashing Competition)에서 최종 승리한 최신 해시 함수.
  • Salt (솔트): 해시값에 무작위 데이터를 추가해 사전 공격을 방어하는 기술.
  • Key Stretching: 연산 비용을 인위적으로 늘려 공격 난이도를 높이는 방법.

※ 본 내용은 공개된 기술 문서와 학술 논문, 주요 암호 라이브러리의 구현 설명을 기반으로 작성되었으며, 최신 버전의 사양 및 구현에 따라 세부 사항이 변동될 수 있다.

둘러보기

더 찾아볼 만한 주제