bcrypt

  • bcrypt는
    Blowfish를 기반으로 만들어진 “단방향 암호화 해싱함수”로 1999년 USENIX에서 발표됐다. Rainbow table 공격을 막기 위해서 salt를 사용하며, 암호검사 요청이 반복될 수록 cost를 늘림으로써, 무차별 대입 공격(brute-force search)을 막을 수 있다. cost는 반복횟수로 2^n 이다.

bcrypt.png


bcrypt 함수는 OpenBSD와 SUSE 리눅스를 비롯한 몇몇 리눅스 배포판에서 암호화 해시 알고리즘으로 사용하고 있다. 리눅스의 /etc/shadow 파일을 열어보면 “$2a$”나 “$2b$”로 시작하는 패스워드 해시가 있는데, 이들이 bcrypt 방식의 암호화 해시다.

bcrypt2.png

  • $ : bcrypt의 오리지날 버전은 $2a$ : bcrypt의 오리지날 버전은 $2$다. 오리지날 버전은 non-ASCII 문자나 널 문자를 처리하는 방법을 정의하지 않았다. $2a$는 널 문자를 포함하며, UTF-8로 인코딩 할 것을 정의한 버전이다. . 오리지날 버전은 non-ASCII 문자나 널 문자를 처리하는 방법을 정의하지 않았다. 널 문자를 포함하며, UTF-8로 인코딩 할 것을 정의한 버전이다.
  • 10$ : Cost의 크기는 2^10이다. Iteration count를 1024만큼 돌리겠다는 얘기다.
  • N9qo8uLOickgx2ZMRZoMye : 랜덤하게 만든 salt
  • ljZAgcFl7p92ldGxad68LJZdL17lhWy : 패스워드. Salt와 패스워드를 묶어서 해시해버렸기 때문에, 유추가 불가능하다

<출처 : bcrypt>

구현 방법

  • JAVA 방식으로 bcrypt 구현하기
  • Python 방식으로 bcrypt 구현하기 <!–

    단지 bcrypt 사용이 최선의 대답이 아닌 이유

  • KDF의 가장 대표적인 사례들은 bcrypt, PBKDF2, scrypt 가 있다. 암호 크래킹 커뮤니티에서는 여전히 위의 3 암호화가 괜찮지만, 암호병렬처리방식으로 암호를 해독하기 위해 GPU 및 ASIC과 같은 새로운 기술을 채택했다고 한다.
  • 암호병렬처리방식 :
  • ASIC(Application-specific integrated circuit)(주문형 반도체) : 특정 목적을 위해 설계된 집적 회로
  • GPU(graphics processing unit)(그래픽처리장치) : 메모리를 빠르게 처리하고 바꾸어 화면으로 출력할 프레임 버퍼 안의 영상 생성을 가속하도록 설계된, 전문화된 전자 회로 –> —

    참조