bcrypt
보이기
![](http://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Disambig_grey.svg/23px-Disambig_grey.svg.png)
일반 | |
---|---|
설계자 | Niels Provos, David Mazières |
최초 출판일 | 1999 |
기원 | 블로피시 |
상세 정보 | |
다이제스트 크기 | 184비트 |
라운드 수 | 비용 변수에 따라 가변적 |
bcrypt는 블로피시 암호에 기반을 둔 암호화 해시 함수로서 Niels Provos와 David Mazières가 설계하였으며 1999년 USENIX에서 발표되었다.[1] 레인보 테이블 공격 방지를 위해 솔트를 통합한 bcrypt는 적응형 함수의 하나이다. 시간이 지남에 따라 속도 저하를 위해 반복 횟수가 증가가 수반될 수 있으므로 연산 파워의 증가에도 브루트 포스 검색 공격에 대한 저항을 유지하게 된다.
bcrypt 함수는 OpenBSD[2] 및 수세 리눅스 등의 일부 리눅스 배포판을 포함한 기타 시스템용 기본 암호 해시 함수이다.[3]
C, C++, C#, Elixir,[4] Go,[5] Java,[6][7] 자바스크립트,[8] 펄, PHP, 파이썬,[9] Ruby 등의 언어용으로 bcrypt 구현체가 존재한다.
개요
[편집]bcrypt 해시 문자열은 다음의 형태에 속한다:
$2b$[cost]$[22 character salt][31 character hash]
예:
$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy \/ \/ \____________________/\_____________________________/ Alg Cost Salt Hash
여기서
2a
: 해시 알고리즘 식별자 (bcrypt)10
: Cost factor (210
==> 1,024 rounds)N9qo8uLOickgx2ZMRZoMye
: 16바이트(128비트) 솔트, base64-encoded to 22 charactersIjZAgcfl7p92ldGxad68LJZdL17lhWy
: 24바이트(192비트) 해시, base64-encoded to 31 characters
알고리즘
[편집]Function bcrypt Input: cost: Number (4..31) log2(Iterations). e.g. 12 ==> 212 = 4,096 iterations salt: array of Bytes (16 bytes) random salt password: array of Bytes (1..72 bytes) UTF-8 encoded password Output: hash: array of Bytes (24 bytes)
//Initialize Blowfish state with expensive key setup algorithm //P: array of 18 subkeys (UInt32[18]) //S: Four substitution boxes (S-boxes), S0...S3. Each S-box is 1,024 bytes (UInt32[256]) P, S ← EksBlowfishSetup(cost, salt, password)
//Repeatedly encrypt the text "OrpheanBeholderScryDoubt" 64 times ctext ← "OrpheanBeholderScryDoubt" //24 bytes ==> three 64-bit blocks repeat (64) ctext ← EncryptECB(P, S, ctext) //encrypt using standard Blowfish in ECB mode
//24-byte ctext is resulting password hash return Concatenate(cost, salt, ctext)
같이 보기
[편집]각주
[편집]- ↑ Provos, Niels; Mazières, David; Talan Jason Sutton 2012 (1999). “A Future-Adaptable Password Scheme”. 《Proceedings of 1999 USENIX Annual Technical Conference》: 81–92.
- ↑ “Commit of first work to repo”. 1997년 2월 13일.
- ↑ “SUSE Security Announcement: (SUSE-SA:2011:035)”. 2011년 8월 23일. 2016년 3월 4일에 원본 문서에서 보존된 문서. 2015년 8월 20일에 확인함.
SUSE's crypt() implementation supports the blowfish password hashing function (id $2a) and system logins by default also use this method.
- ↑ Whitlock, David. “Bcrypt Elixir: bcrypt password hashing algorithm for Elixir.”. 《GitHub》. riverrun.
- ↑ “Package bcrypt”. 《godoc.org》.
- ↑ “jBCrypt - strong password hashing for Java”. 《www.mindrot.org》 (영어). 2017년 3월 11일에 확인함.
- ↑ “bcrypt - A Java standalone implementation of the bcrypt password hash function”. 《github.com》 (영어). 2018년 7월 19일에 확인함.
- ↑ “bcryptjs”. 《npm》.
- ↑ Stufft, Donald. “bcrypt: Modern password hashing for your software and your servers” – PyPI 경유.