비크립트

IT 위키

비크립트(bcrypt)는 비밀번호와 같은 민감한 데이터를 안전하게 저장하기 위한 해시 함수로, 느린 계산 속도와 솔트(salt)를 통해 무차별 대입 공격(Brute Force Attack) 및 레인보우 테이블 공격(Rainbow Table Attack)에 강한 특징을 가진다.

1 개요[편집 | 원본 편집]

bcrypt는 1999년 Niels Provos와 David Mazieres가 발표한 해시 함수로, 원래는 Blowfish 암호 알고리즘 기반으로 설계되었다. 주로 사용자 비밀번호를 안전하게 해시하여 데이터베이스에 저장하는 데 사용된다.

2 특징[편집 | 원본 편집]

  • 느린 해싱 속도
    • 계산 시간이 고정되어 있지 않고, 의도적으로 느리게 설계되어 GPU 기반 공격에도 강함
  • 비밀번호마다 고유한 솔트
    • 같은 비밀번호라도 매번 다른 해시값이 생성되어 레인보우 테이블 공격 무력화
  • 비용 인자(cost factor) 조절 가능
    • 컴퓨팅 성능에 따라 해시 반복 횟수를 조절하여 보안 수준 조정 가능
  • 단방향성
    • 해시값으로부터 원래 데이터를 복원할 수 없음 (복호화 불가능)

3 작동 방식[편집 | 원본 편집]

1. 임의의 솔트(Salt)를 생성한다 (보통 128비트). 2. 솔트를 비밀번호와 결합하여 Blowfish 기반 해시를 여러 번 반복 수행한다. 3. 최종 결과는 솔트와 함께 저장된다.

4 예제 코드[편집 | 원본 편집]

다음은 Python의 `bcrypt` 라이브러리를 사용한 비밀번호 해싱 및 검증 예제이다.

import bcrypt

# 비밀번호 설정
password = b"my_secure_password"

# 솔트를 포함한 해시 생성
hashed = bcrypt.hashpw(password, bcrypt.gensalt())

# 검증
if bcrypt.checkpw(password, hashed):
    print("비밀번호 일치")
else:
    print("비밀번호 불일치")

5 장점[편집 | 원본 편집]

  • 해킹 시 해시값이 유출되더라도 원래 비밀번호 추정이 어려움
  • 솔트 사용으로 동일한 비밀번호에 대해 다른 해시값 생성
  • 비용 인자 조절로 향후 컴퓨팅 성능 발전에 대응 가능

6 단점[편집 | 원본 편집]

  • 계산 비용이 높아 자원 소모가 큼 (그러나 보안을 위해 필요한 트레이드오프)
  • 빠른 인증 처리를 요구하는 환경에는 부적절할 수 있음

7 관련 알고리즘[편집 | 원본 편집]

8 같이 보기[편집 | 원본 편집]

9 참고 문헌[편집 | 원본 편집]