bcrypt

Tony·2023년 3월 5일
0

TL;DR

  • 기본 해시 함수인 SHA, MD5등을 이용하는 것은 빠른 처리속도로 인하여 보안에 취약하기 때문에 충분히 사용자의 password를 보호할 수 없다.
  • bcrypt는 공격자의 속도를 늦추고 해시 값이 매번 다르다

요즘 노드 백엔드 강의를 듣고 있다
강의에서 bcrypt에 대해 가볍게 알려주고 라이브러리를 받아서 사용해보았다
bcrypt는 해시 함수(hash function)이다
해시 함수란 간단히 말해 나머지 연산자를 이용해서 단방향으로 문자열을 변환하는 것이다
비밀번호를 DB에 저장할 때 해시함수를 거쳐 암호화된 문자열로 저장하는데
그 이유는 일부 사람들은 여러 사이트에 같은 비밀번호를 사용하는데 한 사이트가 해킹당했을 때 다른 사이트에서도 해킹을 당하는 것을 방지하기 위해 비밀번호를 암호화해서 저장한다
여기까지가 가볍게 알고 있는 내용이고 더 자세히 알아보자

예시

  • abcd1234 => $2b$10$/LLAco/JyVf4Eol7sCEzmehQogQFmmSb8cQBBKQfB5elDZ3cCK2ay

이번에 bcrypt가 무엇인지 그 주변 생태계와 bcrypt는 어느 범주에 속해있는지 파악해보자

우선 위키백과를 통해 알아보자

bcypt는 블로피시 암호에 기반을 둔 암호화 해시 함수로서 Niels Provos와 David Mazières가 설계하였으며 1999년 USENIX에서 발표되었다.

  • 블로피시(blowfish) : 블로피시(blowfish)는 1993년 브루스 슈나이어가 설계한 키(key) 방식의 대칭형 블록 암호이다. 수많은 암호화 제품군에 포함되어 있다. 블로피시는 소프트웨어에서 양호한 암호화 속도를 제공하지만 현재는 고급 암호화 표준이 더 많은 눈길을 끌고 있다.
    • 블로피시 알고리즘 : 블로피시는 64비트 블록 크기, 또 32비트에서 최대 448비트에 이르는 가변 키 길이를 갖추고 있다.[2] 16 라운드 파이스텔 암호로서 대형 키 의존 S 박스를 이용한다. 구조는 수정된 S 박스를 사용하는 CAST-128과 비슷하다.
    • 블로피시를 이용한 제품 목록 : https://www.schneier.com/academic/blowfish/products/
  • 암호화 해시 함수 : 해시 값으로부터 원래의 입력값과의 관계를 찾기 어려운 성질을 가지는 경우를 의미한다.
    • 해시 함수 : 해시 함수(hash function) 또는 해시 알고리즘(hash algorithm) 또는 해시함수알고리즘(hash函數algorithm)은 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다.
      • 해시함수(hash函數)는 하나의 주어진 출력에 대하여 이 출력으로 사상시키는 하나의 입력을 찾는 것이 계산적으로 불가능하고, 하나의 주어진 입력에 대하여 같은 출력으로 사상시키는 또 다른 입력을 찾는 것이 계산적으로 불가능하다는 두 가지 성질을 만족하면서 임의의 비트열을 고정된 길이의 비트열로 사상시키는 함수이다.

bcrypt 해시 문자열 구성

$2b$[cost]$[22 character salt][31 character hash]

  • 2a : 해시 알고리즘 식별자
    • 2a : bcrypt를 의미
  • cost :
    • 키 스트레칭한 횟수. 2^n으로 10이라면 2^10 = 1024(번) 이다
  • salt : 솔트(salt)는 데이터, 비밀번호, 통과암호를 해시 처리하는 단방향 함수의 추가 입력으로 사용되는 랜덤 데이터이다.
    • 128 비트 솔트, 22자, base64로 인코딩
  • hash : salting과 키 스트레칭 후 해시 값

검증

  • 비밀번호가 동일한지 검증하기 위해 입력된 비밀번호에 salting, 키 스트레칭을 해서 저장된 bcrypt 문자열과 비교한다

salting과 키 스트레칭

  • salting : 실제 정보 이외에 추가적으로 무작위 데이터를 더해서 해시 값을 계산하는 방법

    • salt로 인해 해시값이 달라지기 때문에 rainbow attack 같이 미래 해시 값을 계산해 공격하는 것을 무효화 시킨다
  • 키 스트레칭 : 기존 단방향 알고리즘의 빠른 실행 속도가 해킹에 오히려 도움이 될 수 있기 때문에 취약했기 때문에 해시 반복 횟수를 추가하여 실행속도를 늦춤

참고

profile
움직이는 만큼 행복해진다

0개의 댓글