Bcrypt
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
bcrypt는 블로우피시 암호를 기반으로 설계된 비밀번호 해싱 알고리즘이다. Eksblowfish 키 설정 알고리즘을 핵심으로 사용하며, 비밀번호와 솔트를 결합하여 P-배열과 S-box를 초기화하고 반복적인 키 확장을 통해 보안을 강화한다. bcrypt는 비용(cost) 파라미터를 조절하여 해싱 라운드를 늘릴 수 있어, 무차별 대입 공격에 대한 저항력을 높인다. bcrypt 해시는 알고리즘 식별자, 비용, 솔트, 해시 값으로 구성되며, OpenBSD의 crypt 형식을 따른다. bcrypt는 PBKDF2, scrypt, Argon2와 같은 다른 비밀번호 해싱 알고리즘과 비교되며, 최대 비밀번호 길이 제한 및 해시 잘림과 같은 몇 가지 한계가 있다.
더 읽어볼만한 페이지
- 암호 소프트웨어 - OpenSSL
OpenSSL은 1998년에 설립된 암호화 도구 프로젝트로, 다양한 암호화 알고리즘과 프로토콜을 지원하며, 아파치 라이선스를 채택했고, 보안 문제와 API 호환성 문제 등의 비판을 받았다. - 암호 소프트웨어 - I2P
I2P는 2003년 Freenet에서 분기된 익명 P2P 분산 통신 계층으로, IP 주소 노출을 방지하며 다양한 소프트웨어와 익명성 응용 프로그램을 지원하고, 기부금으로 운영되며 6~8주마다 릴리스를 진행한다. - 암호학 - 양자 컴퓨터
양자 컴퓨터는 양자역학적 현상을 이용하여 정보를 처리하는 컴퓨터로, 큐비트를 통해 0과 1을 동시에 표현하여 특정 연산에서 기존 컴퓨터보다 빠른 속도를 보이며 암호 해독, 신약 개발 등 다양한 분야에 혁신을 가져올 것으로 기대된다. - 암호학 - 암호화
암호화는 정보를 보호하기 위해 사용되는 기술로서, 단순한 문자 치환 방식에서 시작하여 현대에는 강력한 암호화 표준과 다양한 종류로 발전했으며, IT 시스템 전반에 적용되지만, 사이버 공격과 양자 컴퓨팅의 발전에 대한 대응이 필요한 기술이다.
Bcrypt | |
---|---|
개요 | |
종류 | 패스워드 기반 키 유도 함수 |
기반 암호 | 블로피시 |
설계자 | 닐스 프로보스, 데이비드 마지에레스 |
발표일 | 1999년 |
다이제스트 크기 | 184비트 |
라운드 수 | 비용 매개변수를 통해 가변적 |
상세 정보 | |
유래 | 블로피시 암호 |
최초 언급 | OpenBSD CVS 로그 (2014년 3월 23일) |
활용 | |
사용 예 | SUSE crypt() 구현, Elixir, Go, Java, JavaScript, Rust, Zig 등 다양한 언어에서 사용됨 |
2. 역사적 배경
1999년, 프로보스(Provos)와 마지에르(Mazières)는 USENIX에서 bcrypt를 처음 발표했다.[44] bcrypt는 블로피시 암호의 복잡한 키 설정 단계를 활용하여 설계되었다. 이들은 "Eksblowfish"("expensive key schedule Blowfish", 복잡한 키 스케줄 블로우피쉬)라는 새로운 키 설정 알고리즘을 도입하여 보안을 강화했다.[44]
키 설정은 표준 블로우피쉬 키 설정의 수정된 형태로 시작하며, 여기에서 salt(솔트)와 패스워드(비밀번호) 둘 다 모든 서브키를 설정하는 데 사용된다. 그런 다음 표준 블로우피쉬 키 설정 알고리즘이 적용되는 여러 라운드가 있으며, 각 라운드는 이전 라운드의 서브키 상태에서 시작하여 salt와 패스워드를 번갈아 가며 키로 사용한다. 이론적으로는 표준 블로우피쉬 키 스케줄보다 강하지 않지만, 재키 설정 라운드의 수는 구성 가능하다. 따라서 이 프로세스를 임의로 느리게 만들 수 있으며, 이는 해시 또는 salt에 대한 무차별 대입 공격을 방지하는 데 도움이 된다.[44]
bcrypt의 초기 버전은 `'$2$'`였다. 이후, 문자열 처리 방식을 개선한 `'$2a$'` 버전이 나왔다.[45]
`'$2a$'` 버전에서 문자열은 다음과 같이 처리된다.
- 문자열은 UTF-8로 인코딩된다.
- Null 종단이 포함되어야 한다.
2011년 6월에는 BCrypt의 PHP 구현인 '''crypt_blowfish'''에서 8비트 문자열 처리에 관한 버그가 발견되어[46], `'$2x$'`와 `'$2y$'` 버전이 제안되었으나, OpenBSD를 포함한 어떠한 배포판도 채택하지 않았다.
2014년 2월에는 OpenBSD의 bcrypt 구현에서 버그가 발견되었다.[45] 패스워드 길이가 255자를 초과하면 오버플로가 발생하는 문제였다.[47] OpenBSD에서 버그가 발견되었을 때 버전 번호가 갱신되어 `'$2b$'`가 되었다.
3. 알고리즘
Bcrypt 알고리즘은 블로우피시 암호를 기반으로 설계되었으며, 핵심은 "Eksblowfish" 키 설정 알고리즘이다. Eksblowfish는 패스워드와 솔트를 사용하여 블로우피시의 P-배열과 S-box를 초기화하고, 반복적인 키 확장을 통해 보안을 강화한다.
Bcrypt는 "OrpheanBeholderScryDoubt" 문자열을 블로우피시 암호로 64회 반복 암호화한다. 이때, 일반적인 블로우피시 키 설정 함수 대신 "비용이 많이 드는(expensive key setup)" EksBlowfishSetup 함수를 사용한다.
다음은 bcrypt 알고리즘의 작동 방식을 나타낸 의사 코드(pseudo-code)이다.
```
함수 bcrypt
입력:
cost: 숫자 (4..31). log₂(반복 횟수). 예: 12 ==> 2¹² = 4,096회 반복
salt: 바이트 배열 (16 바이트). 무작위 salt.
password: 바이트 배열 (1..72 바이트). UTF-8 인코딩된 패스워드.
출력:
hash: 바이트 배열 (24 바이트)
// EksBlowfishSetup 함수를 사용하여 블로우피시 상태를 초기화한다.
P, S ← EksBlowfishSetup(cost, salt, password)
// "OrpheanBeholderScryDoubt" 문자열을 64회 반복 암호화한다.
ctext ← "OrpheanBeholderScryDoubt" // 24바이트, 3개의 64비트 블록
반복 (64)
ctext ← EncryptECB(P, S, ctext) // ECB 모드에서 표준 블로우피시 암호화
// 24바이트 ctext가 결과 해시값
반환 Concatenate(cost, salt, ctext)
```
Bcrypt 알고리즘은 블로우피시 암호를 기반으로 하며, Eksblowfish 키 설정을 통해 보안을 강화한다. Eksblowfish는 솔트와 패스워드를 모두 사용하여 서브키를 설정하고, 키 생성 라운드 수를 조절하여 계산량을 늘려 무차별 대입 공격에 대한 저항성을 높인다.
3. 1. Eksblowfish 키 설정
`EksBlowfishSetup` 함수는 bcrypt의 핵심 구성 요소로, 보안 강화를 위한 복잡한 키 설정 과정을 담당한다. 이 함수는 비밀번호와 솔트(salt)를 사용하여 P-배열과 S-box를 초기화하고, 지정된 비용(cost factor)에 따라 `ExpandKey` 함수를 반복 호출하여 키를 확장한다.EksBlowfishSetup 함수:
```
함수 EksBlowfishSetup
입력:
cost: 숫자 (4..31). log₂(반복 횟수). 예: 12 ==> 2¹² = 4,096 반복
salt: 바이트 배열 (16 바이트). 무작위 salt.
password: 바이트 배열 (1..72 바이트). UTF-8 인코딩된 비밀번호.
출력:
P: UInt32 배열. 18개의 라운드별 서브키 배열.
S₁..S₄: UInt32 배열. 4개의 SBox 배열; 각 SBox는 256개의 UInt32 (즉, 각 SBox는 1 KiB).
// P (서브키)와 S (대체 상자)를 파이의 16진수 숫자로 초기화.
P, S ← InitialState()
// 비밀번호와 salt를 기반으로 P와 S를 순열.
P, S ← ExpandKey(P, S, password, salt)
// 키 설정의 "Expensive" 부분.
반복 (2ᶜᵒˢᵗ)
P, S ← ExpandKey(P, S, password, 0)
P, S ← ExpandKey(P, S, salt, 0)
반환 P, S
```
1. 초기화:
- `InitialState()` 함수를 호출하여 P-배열과 S-box를 파이(π)의 소수점 이하 자릿수를 16진수로 변환한 값으로 초기화한다. 이는 블로우피시 알고리즘의 초기화 방식과 동일하다.
2. 키 확장 (ExpandKey):
- `ExpandKey` 함수를 사용하여 비밀번호와 솔트를 P-배열 및 S-box와 혼합한다.
- `ExpandKey` 함수는 비밀번호와 솔트를 번갈아 사용하며 P-배열과 S-box를 갱신한다.
- `ExpandKey(P, S, password, salt)`: 비밀번호와 솔트를 모두 사용.
- `ExpandKey(P, S, password, 0)`: 비밀번호만 사용 (솔트는 0으로 처리).
- `ExpandKey(P, S, salt, 0)`: 솔트만 사용 (비밀번호는 0으로 처리).
3. 반복:
- `ExpandKey` 함수 호출을 `2ᶜᵒˢᵗ` 번 반복한다. `cost` 값은 bcrypt 함수에 입력으로 주어지며, 반복 횟수를 결정한다.
- `cost` 값이 클수록 반복 횟수가 증가하여 키 설정에 더 많은 계산 비용이 소요된다.
- 각 반복 단계에서 `ExpandKey` 함수는 비밀번호와 솔트를 번갈아 가며 P-배열과 S-box를 갱신한다.
ExpandKey 함수:
```
함수 ExpandKey
입력:
P: UInt32 배열. 18개의 하위 키 배열.
S₁..S₄: UInt32[1024]. 4개의 1KB S-Box.
password: Byte 배열 (1..72 바이트). UTF-8 인코딩된 비밀번호.
salt: Byte[16]. 무작위 salt.
출력:
P: UInt32 배열. 라운드당 18개의 하위 키 배열.
S₁..S₄: UInt32[1024]. 4개의 1KB S-Box.
// 비밀번호를 P 하위 키 배열에 섞음.
for n ← 1 to 18 do
Pₙ ← Pₙ xor password[32(n-1)..32n-1] // 비밀번호를 순환.
// 128비트 salt를 두 개의 64비트 반쪽으로 취급.
saltHalf[0] ← salt[0..63] // salt의 하위 64비트
saltHalf[1] ← salt[64..127] // salt의 상위 64비트
// 모두 0으로 8바이트(64비트) 버퍼 초기화.
block ← 0
// 내부 상태를 P-box에 섞음.
for n ← 1 to 9 do
// 64비트 block을 64비트 salt 반쪽과 XOR.
block ← block xor saltHalf[(n-1) mod 2] // saltHalf[0]과 saltHalf[1] 사이를 번갈아 처리.
// 현재 키 스케줄을 사용하여 block을 암호화.
block ← Encrypt(P, S, block)
P₂ₙ ← block[0..31] // block의 하위 32비트
P₂ₙ₊₁ ← block[32..63] // block의 상위 32비트
// 암호화된 상태를 state의 내부 S-box에 섞음.
for i ← 1 to 4 do
for n ← 0 to 127 do
block ← Encrypt(state, block xor saltHalf[(n-1) mod 2]) // 위와 동일
Sᵢ[2n] ← block[0..31] // 하위 32비트
Sᵢ[2n+1] ← block[32..63] // 상위 32비트
return state
```
`ExpandKey` 함수에서 `ExpandKey(state, 0, key)`는 솔트가 모두 0이므로 일반적인 블로우피시 키 스케줄과 동일하고, `ExpandKey(state, 0, salt)`는 솔트를 128비트 키로 사용한다는 점이 다르다.
결론적으로, `EksBlowfishSetup` 함수는 비밀번호와 솔트를 혼합하고 반복적인 키 확장 과정을 통해 계산 복잡도를 높여 무차별 대입 공격에 대한 보안을 강화한다. 이러한 과정은 프로보스(Provos)와 마지에르(Mazières)가 개발한 "Eksblowfish"(비용이 많이 드는 키 스케줄 블로우피시)의 핵심 아이디어이다.
3. 2. 키 확장 (ExpandKey)
`ExpandKey` 함수는 비밀번호와 솔트를 이용하여 블로우피시 암호의 P-배열과 S-box를 갱신하는 과정을 담당한다.1. 비밀번호 혼합:
- 18개의 P-배열 (P1 ... P18) 각 요소에 대해 비밀번호와 배타적 논리합(XOR) 연산을 수행한다.
- 비밀번호는 32비트 단위로 순환하며 P-배열의 각 요소와 XOR 연산된다.[1]
2. 솔트 기반 암호화 (P-배열 갱신):
- 128비트 솔트를 두 개의 64비트 (saltHalf[0], saltHalf[1])로 나눈다.
- 초기값 0으로 설정된 64비트 블록(`block`)을 생성한다.
- 총 9번 반복:
- `block`과 `saltHalf`의 값을 번갈아 XOR 연산한다. (`n`이 홀수면 `saltHalf[0]`, 짝수면 `saltHalf[1]`).
- 현재 P-배열과 S-box를 사용하여 `block`을 암호화한다.
- 암호화된 `block`의 상위 32비트는 P2n, 하위 32비트는 P2n+1에 저장한다.
3. 솔트 기반 암호화 (S-box 갱신):
- 4개의 S-box (S1 ... S4) 각각에 대해 다음 과정 반복:
- 각 S-box는 256개의 32비트 요소를 갖는다.
- 128번 반복:
- `block`과 `saltHalf` 값을 번갈아 XOR 연산한다.
- 현재 P-배열과 S-box를 사용하여 `block`을 암호화한다.
- 암호화된 `block`의 상위 32비트는 Si[2n], 하위 32비트는 Si[2n+1]에 저장한다.
4. 결과 반환:
`ExpandKey` 함수에서 솔트가 0인 경우, XOR 연산은 아무런 영향을 주지 않으므로, 일반적인 블로우피시 키 스케줄과 동일하게 동작한다. 비밀번호가 0인 경우에도 마찬가지로 솔트를 128비트 키로 사용하는 것과 유사하게 동작한다.[1]
4. 해시 포맷
bcrypt 해시 문자열은 다음과 같은 형태를 가진다:
`$2b$[비용]$[22자 솔트][31자 해시]`
예시:
`$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy`
위 예시에서 각 부분은 다음을 의미한다.
- `2a`: 해시 알고리즘 식별자 (bcrypt)
- `10`: Cost factor (210 ==> 1,024 라운드)
- `N9qo8uLOickgx2ZMRZoMye`: 16바이트(128비트) 솔트, base64로 인코딩되어 22자
- `IjZAgcfl7p92ldGxad68LJZdL17lhWy`: 24바이트(192비트) 해시, base64로 인코딩되어 31자
bcrypt의 base-64 인코딩은 `./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789` 테이블을 사용하며,[11] 이는 Base64 인코딩과는 다르다.
bcrypt로 해시된 문자열은 "$2a$", "$2b$" 또는 "$2y$"와 같은 접두사를 가진다. 이 접두사는 해시에 사용된 알고리즘에 따라 다르며, shadow 비밀번호 파일이 Modular Crypt Format이라는 형식으로 작성되어 있고, bcrypt 해시임을 나타낸다.[44] 해시 문자열의 나머지 부분에는 비용 파라미터, 128비트 솔트(Radix-64로 인코딩되어 22자), 184비트 결과 해시 값(Radix-64로 인코딩되어 31자)이 포함된다.[41] Radix-64는 unix/crypt 알파벳을 사용하며, 표준 Base-64와는 다르다.[42][43] 비용 파라미터는 키 확장의 반복 횟수를 설정하며, 2의 거듭제곱 수이며 암호 알고리즘의 입력값이다.
`$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy` 라는 shadow 비밀번호 레코드를 예로 들면, 비용 파라미터는 10 (키 확장 라운드 수는 210), 솔트는 `N9qo8uLOickgx2ZMRZoMye`, 결과 해시는 `IjZAgcfl7p92ldGxad68LJZdL17lhWy`이다. 일반적인 비밀번호 관리 관행에 따라, 사용자의 비밀번호 자체는 저장되지 않는다.
5. 버전별 특징
6. 다른 비밀번호 해싱 알고리즘과의 비교
- '''PBKDF2''': PBKDF2는 일반적으로 사용되는 SHA2 해싱 알고리즘을 기반으로 하며, 이는 메모리 하드(memory-hard)하지 않다.[19] SHA2는 가벼운 장치(예: 스마트 카드)에서 실행될 수 있도록 매우 가볍게 설계되었기 때문에, PBKDF2는 비밀번호 저장에 매우 취약하며, 초당 수 조 번의 해시를 수행할 수 있는 상용 SHA-2 해싱 하드웨어를 쉽게 구할 수 있다.[20][21]
- '''scrypt''': Scrypt는 4MB 미만의 메모리 요구 사항에서 bcrypt보다 약하다.[22] GPU 기반 공격에 대해 동등한 수준의 방어를 달성하려면 bcrypt보다 훨씬 많은 메모리가 필요하다.
- '''argon2''': Argon2는 약 1000ms 이상의 실행 시간을 넘어서야 bcrypt의 강도와 일치하거나 능가한다. 짧은 실행 시간에서는 bcrypt가 더 안전할 수 있다.[23]
7. 한계 및 비판
Bcrypt는 몇 가지 한계와 비판점을 가지고 있다.
Bcrypt는 최대 72바이트 길이의 비밀번호를 지원하는데, 이는 `ExpandKey` 함수의 비밀번호 처리 방식 때문이다.[1] 72바이트를 초과하는 비밀번호는 잘리거나 반복되어 처리될 수 있다. UTF-8 인코딩에서 한 문자가 최대 4바이트를 차지할 수 있으므로, 최악의 경우 18자(72바이트)로 제한될 수 있다.[1]
표준 OpenBSD 구현에서는 24바이트의 암호문을 23바이트로 잘라내는데,[27] 이로 인해 8비트가 손실되며, 그 이유는 명확하지 않다. 또한, bcrypt의 base-64 인코딩은 `./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789` 테이블을 사용하며,[11] 이는 RFC 4648 Base64 인코딩과 다르다.
7. 1. 최대 비밀번호 길이
Bcrypt는 최대 72바이트 길이의 비밀번호를 지원한다. 이는 `ExpandKey` 함수의 비밀번호 처리 방식 때문이다.[1] 72바이트를 초과하는 비밀번호는 잘리거나 반복되어 처리된다.`ExpandKey` 함수는 18개의 4바이트 하위 키(P)에 비밀번호를 XOR 연산한다.[1]
```
P1..P18 ← P1..P18 xor passwordBytes
```
비밀번호(UTF-8 인코딩)는 72바이트가 될 때까지 반복된다. 예를 들어, 29바이트 길이의 "correct horse battery staple␀" 비밀번호는 다음과 같이 반복된다.[1]
: `correct horse battery staple␀correct horse battery staple␀correct horse ` (72 바이트)
UTF-8 인코딩에서 한 문자가 최대 4바이트를 차지할 수 있으므로, 최악의 경우 18자(72바이트)로 제한될 수 있다.[1]
많은 bcrypt 구현은 OpenBSD 구현을 따라 비밀번호를 처음 72바이트로 자른다.[11]
2024년, Okta, Inc.의 싱글 사인온 서비스에서 사용자 이름 뒤에 비밀번호를 연결하고 bcrypt로 해시하는 방식 때문에, 사용자 이름이 길면 비밀번호가 무시되는 취약점이 발견되었다.[26]
7. 2. 비밀번호 해시 잘림
표준 OpenBSD 구현에서는 24바이트의 암호문을 23바이트로 잘라낸다.[27] 이로 인해 8비트가 손실되며, 그 이유는 명확하지 않다.7. 3. Base64 인코딩 알파벳
bcrypt의 base-64 인코딩은 `./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789` 테이블을 사용하며,[11] 이는 RFC 4648 Base64 인코딩과 다르다. 표준 OpenBSD 구현에서 사용되는 인코딩은 crypt와 동일한 Base64 알파벳을 사용하며, 이 알파벳은 `./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`이다.[11]참조
[1]
간행물
A Future-Adaptable Password Scheme
https://www.usenix.o[...]
USENIX
1999-06-10
[2]
웹사이트
CVS log for src/lib/libc/crypt/bcrypt.c
http://cvsweb.openbs[...]
OpenBSD
2023-05-25
[3]
웹사이트
SUSE Security Announcement: (SUSE-SA:2011:035)
https://www.suse.com[...]
SUSE
2015-08-20
[4]
웹사이트
Bcrypt Elixir: bcrypt password hashing algorithm for Elixir.
https://github.com/r[...]
riverrun
2021-09-21
[5]
웹사이트
Package bcrypt
https://godoc.org/go[...]
[6]
웹사이트
jBCrypt - strong password hashing for Java
http://www.mindrot.o[...]
2017-03-11
[7]
웹사이트
bcrypt - A Java standalone implementation of the bcrypt password hash function
https://github.com/p[...]
2018-07-19
[8]
웹사이트
bcryptjs
https://www.npmjs.co[...]
riverrun
2017-02-07
[9]
웹사이트
rust-bcrypt
https://github.com/K[...]
Vincent Prouillet
2024-11-08
[10]
웹사이트
zigstd
https://github.com/z[...]
jedisct1
2020-10-26
[11]
웹사이트
bcrypt.c source code, lines 57-58
https://cvsweb.openb[...]
2022-01-29
[12]
웹사이트
Modular Crypt Format — Passlib v1.7.1 Documentation
https://passlib.read[...]
[13]
웹사이트
bcrypt password hash bugs fixed, version changes and consequences
http://undeadly.org/[...]
[14]
웹사이트
oss-sec: CVE request: crypt_blowfish 8-bit character mishandling
http://seclists.org/[...]
[15]
웹사이트
'bcrypt version changes' - MARC
http://marc.info/?l=[...]
[16]
웹사이트
bcrypt.c code fix for 2014 bug
https://cvsweb.openb[...]
2022-02-17
[17]
논문
Fast Software Encryption, Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish)
https://www.schneier[...]
Springer-Verlag
1993-12
[18]
웹사이트
jBCrypt security advisory
http://www.mindrot.o[...]
2010-02-01
[19]
문서
Secure Hash Standard
https://csrc.nist.go[...]
[20]
웹사이트
Goldshell KD6 profitability | ASIC Miner Value
https://www.asicmine[...]
[21]
웹사이트
Goldshell KD6 Profitability
https://www.minerasi[...]
[22]
웹사이트
Why I Don't Recommend Scrypt
https://blog.ircmaxe[...]
2014-03-12
[23]
웹사이트
Argon2 vs bcrypt vs. scrypt: which hashing algorithm is right for you?
https://stytch.com/b[...]
2023-03
[24]
웹사이트
OWASP Password Storage Cheat Sheet
https://cheatsheetse[...]
[25]
웹사이트
Product Specifications
https://ark.intel.co[...]
[26]
웹사이트
Why the long name? Okta discloses auth bypass bug affecting 52-character usernames
https://www.theregis[...]
2024-11-05
[27]
웹사이트
src/lib/libc/crypt/bcrypt.c at master · openbsd/src
https://github.com/o[...]
2024-12-03
[28]
문서
bcrypt file encryption program homepage
http://bcrypt.source[...]
[29]
웹사이트
bcrypt APK for Android - free download on Droid Informer
https://droidinforme[...]
[30]
웹사이트
T2 package - trunk - bcrypt - A utility to encrypt files.
http://t2sde.org/pac[...]
[31]
웹사이트
Oracle GoldenGateのライセンス
https://docs.oracle.[...]
[32]
간행물
A Future-Adaptable Password Scheme
http://www.usenix.or[...]
[33]
웹사이트
Commit of first work to repo
//cvsweb.openbsd.org[...]
2021-01-29
[34]
웹사이트
SUSE Security Announcement: (SUSE-SA:2011:035)
https://www.suse.com[...]
2015-08-20
[35]
웹사이트
Package bcrypt
https://godoc.org/go[...]
2020-01-29
[36]
웹사이트
jBCrypt - strong password hashing for Java
http://www.mindrot.o[...]
2017-03-11
[37]
웹사이트
bcrypt - A Java standalone implementation of the bcrypt password hash function
https://github.com/p[...]
2018-07-19
[38]
웹사이트
bcrypt
https://www.npmjs.co[...]
2021-01-29
[39]
웹사이트
Bcrypt Elixir: Bcrypt password hashing algorithm for Elixir.
https://github.com/r[...]
riverrun
2021-01-29
[40]
웹사이트
bcrypt: Modern password hashing for your software and your servers
https://github.com/p[...]
2021-01-29
[41]
문서
passlib.
https://passlib.read[...]
[42]
웹사이트
Python bcrypt - Modern password hashing for your software and your servers
https://github.com/p[...]
2020-01-29
[43]
웹사이트
Bouncy Castle Java Distribution - BCrypt implememntation
https://github.com/b[...]
2021-01-29
[44]
웹사이트
Modular Crypt Format — Passlib v1.7.1 Documentation
https://passlib.read[...]
Assurance Technologies, LLC.
2021-01-29
[45]
웹사이트
bcrypt password hash bugs fixed, version changes and consequences
http://undeadly.org/[...]
2021-01-29
[46]
웹사이트
oss-sec: CVE request: crypt_blowfish 8-bit character mishandling
http://seclists.org/[...]
2021-01-29
[47]
웹사이트
"'bcrypt version changes' - MARC"
http://marc.info/?l=[...]
2021-01-29
[48]
저널
Fast Software Encryption, Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish)
https://www.schneier[...]
Springer-Verlag
[49]
웹사이트
jBCrypt security advisory
http://www.mindrot.o[...]
2010-02-01
[50]
URL
bcrypt file encryption program homepage
http://bcrypt.source[...]
[51]
URL
http://bcrypt463065.[...]
[52]
URL
http://www.t2-projec[...]
[53]
URL
https://docs.oracle.[...]
[54]
저널
A Future-Adaptable Password Scheme
http://www.usenix.or[...]
[55]
웹인용
Commit of first work to repo
"//cvsweb.openbsd.or[...]
1997-02-13
[56]
웹인용
SUSE Security Announcement: (SUSE-SA:2011:035)
https://www.suse.com[...]
2011-08-23
[57]
웹인용
Bcrypt Elixir: bcrypt password hashing algorithm for Elixir.
https://github.com/r[...]
riverrun
[58]
웹인용
Package bcrypt
https://godoc.org/go[...]
[59]
웹인용
jBCrypt - strong password hashing for Java
http://www.mindrot.o[...]
2017-03-11
[60]
웹인용
bcrypt - A Java standalone implementation of the bcrypt password hash function
https://github.com/p[...]
2018-07-19
[61]
웹인용
bcryptjs
https://www.npmjs.co[...]
[62]
웹인용
bcrypt: Modern password hashing for your software and your servers
https://github.com/p[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com