PBKDF2
PBKDF2암호학에서 PBKDF1 및 PBKDF2(패스워드 기반 키 파생 함수 1 및 2)는 브루트 포스 [1]공격의 취약성을 줄이기 위해 사용되는 계산 비용이 감소하는 주요 파생 함수입니다.
PBKDF2는 RSA Laborities의 PKCS(Public-Key Cryptography Standards) 시리즈의 일부이며, 특히 PKCS #5 v2.0은 Internet Engineering Task Force의 RFC 2898로도 발행됩니다.최대 160비트 길이의 [2]파생 키만 생성할 수 있는 PBKDF1을 대체합니다.2017년에 발표된 RFC 8018(PKCS #5 v2.1)에서는 패스워드 [3]해시에 PBKDF2를 권장하고 있습니다.
목적과 운용
PBKDF2는 해시 기반 메시지 인증 코드(HMAC) 등의 의사랜덤 함수를 솔트값과 함께 입력 패스워드 또는 패스프레이즈에 적용하고 이 프로세스를 여러 번 반복하여 파생 키를 생성합니다.이러한 키는 이후 동작에서 암호 키로 사용할 수 있습니다.추가된 계산 작업으로 인해 암호 해독이 훨씬 더 어려워지고 키 스트레칭으로 알려져 있습니다.
표준이 2000년에 작성되었을 때 권장되는 최소 반복 횟수는 1,000회였지만 이 파라미터는 CPU 속도가 증가함에 따라 시간이 지남에 따라 증가하는 것을 의도하고 있습니다.2005년의 Kerberos 규격에서는 4,096회 [1]반복을 권장하고 있습니다.보고에 따르면 Apple은 iOS 3에 2,000회,[4] iOS 4에 10,000회를 사용했다고 합니다.또한 2011년의 LastPass는 JavaScript 클라이언트에 5,000회, 서버 측 [5]해시에 100,000회 반복을 사용했습니다.2021년에 OWASP는 PBKDF2-HMAC-SHA256에 310,000회, PBKDF2-HMAC-SHA512에 [6]120,000회 반복 사용을 권장합니다.
패스워드에 솔트를 추가하면 사전에 계산된 해시(무지개 테이블)를 공격에 사용할 수 없게 되어 여러 패스워드를 동시에 테스트하지 않고 개별적으로 테스트해야 합니다.표준에서는 최소 64비트의 [7]소금 길이를 권장합니다.미국 국립표준기술연구소는 염장 128비트를 [8]권장하고 있습니다.
키 파생 프로세스
PBKDF2 키 파생 기능에는 5개의 입력 [9]파라미터가 있습니다.
- DK = PBKDF2(PRF,Password,Salt,c,dkLen)
여기서:
- PRF는 출력길이를 가진2개의 파라미터의 의사난수함수입니다.hLen(키드 HMAC 등)
- Password는 파생된 키가 생성되는 마스터 패스워드입니다.
- Salt일련의 비트로 암호화 소금으로 알려져 있습니다.
- c원하는 반복 횟수입니다.
- dkLen파생된 키의 원하는 비트 길이입니다.
- DK생성된 파생 키입니다.
각각hLen- 파생 키의 비트 블록i TDK는 다음과 같이 계산됩니다(+ 마킹 문자열 연결 사용).
- DK= T1 + T2 + δdklen/hlen + T
- Ti = F ( )Password,Salt,c,i)
함수 F는 연결된 PRF의 c 반복의 xor(^)입니다.PRF의 첫 번째 반복에서는 PRF 키로서 Password를 사용하고 Salt를 사용하여i입력으로서 빅 엔디안 32비트 정수로 부호화됩니다.(i는 1 베이스의 인덱스입니다)PRF의 후속 반복에서는 PRF 키로 Password를 사용하고 입력으로 이전 PRF 계산 출력을 사용합니다.
- F(Password,Salt,c,i) = U1 ^ U2 ^ ^ Uc
여기서:
- U1 = PRF(Password,Salt+ INT_32_BE(i))
- U2 = PRF(Password, U1)
- ⋮
- Uc = PRF(Password, Uc−1)
예를 들어, WPA2는 다음을 사용합니다.
- DK = PBKDF2 (HMAC-SHA1,passphrase,ssid, 4096, 256)
PBKDF1은 보다 심플한 프로세스를 가지고 있었습니다.첫 번째 U(이 버전에서는 T라고 불립니다)는 PasswordPRF(+)에 의해 작성되며 다음 U는 단순 PRF()Uprevious입니다.키는 최종 해시의 첫 번째 dkLen 비트로 추출되므로 크기 [9]제한이 있습니다.
HMAC 충돌
PBKDF2는 HMAC를 의사 랜덤 함수로 사용할 때 대상 속성을 가집니다.각 [10]쌍의 콜리젼에 의해 임의의 수의 다른 패스워드 페어를 구축할 수 있습니다.제공된 암호가 기본 HMAC 해시 함수의 블록 크기보다 길면 암호가 먼저 요약으로 미리 해시되고 대신 해당 요약이 암호로 사용됩니다.예를 들어 다음 암호가 너무 깁니다.
- 비밀번호:
plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd
따라서 (예를 들어 HMAC-SHA1을 사용하는 경우) SHA-1을 사용하여 다음과 같이 사전 해시됩니다.
- SHA1(16진수):
65426b585154667542717027635463617226672a
ASCII에서는 다음과 같이 나타낼 수 있습니다.
- SHA1(ASCII):
eBkXQTfuBqp'cTcar&g*
즉, 솔트 또는 반복에 관계없이 PBKDF2-HMAC-SHA1은 패스워드에 대해 동일한 키바이트를 생성합니다.
- "plnlrtfpijpuhqylxbgqiiipiexvfsavzgbcfuskozwpngsyejqlmjsytrmd"
- "eBkXQTfuBqp'cTcar&g*"
예를 들어, 다음과 같습니다.
- PRF: HMAC-SHA1
- 소금: A009C1A485912C6AE630D3E744240B04
- 반복 횟수: 1,000
- 파생 키 길이: 16 바이트
다음 2개의 함수 호출:
PBKDF2-HMAC-SHA1("plnlrtfpijpuhqylxbgiiipiexvfsavzgbcfskozwpsyejqlmjtrmd", ...") PBKDF2-HMAC-SHA1("eBKXQPUH1")
는 동일한 파생 키바이트를 생성합니다(17EB4014C8C461C300E9B61518B9A18B
)이러한 키 충돌은 보안 취약성을 나타내지 않습니다.[11]비밀번호 해시를 생성하려면 원래 비밀번호를 알아야 하기 때문입니다.
PBKDF2 대체품
PBKDF2의 약점 중 하나는 반복 횟수를 조정하여 임의로 많은 컴퓨팅 시간을 소요할 수 있지만, 작은 회로와 매우 적은 RAM으로 구현할 수 있기 때문에 애플리케이션 고유의 집적회로 또는 그래픽 처리 장치를 사용하여 비교적 저렴한 가격으로 [12]무차별 공격을 할 수 있다는 것입니다.그bcrypt 암호 해시 함수들과 더욱 더 현대적인 scrypt 키 파생 함수고 그래서 더욱 더 ASIC와 GPU에 공격에 저항성 메모리의 임의의 큰 양을 사용할 수 있약간 그런 attacks,[13]에 강하다 램( 하지만 여전히 따로 데려간 CPU시간을 일정한 금액을 고정-지 않)의 많은 돈이 필요하다..[12]
2013년에는 보다 저항적인 접근 방식을 개발하기 위해 PHC(Password Hashing Competition)가 개최되었습니다.2015년 7월 20일, PHC의 최종 수상자로 Argon2가 선정되었으며, Catena, Lyra2, yescrypt, [14]Makwa 등 4개의 패스워드 해시 스킴이 특별히 인정되었습니다.또 다른 대안은 벌룬 해싱입니다. 벌룬 해싱은 NIST 암호 [15]지침에서 권장됩니다.
「 」를 참조해 주세요.
레퍼런스
- ^ a b Raeburn, Kenneth. "Advanced Encryption Standard (AES) Encryption for Kerberos 5". tools.ietf.org. RFC 3962. Retrieved October 23, 2015.
- ^ Kaliski, Burt. "PKCS #5: Password-Based Cryptography Specification, Version 2.0". tools.ietf.org. RFC 2898. Retrieved October 23, 2015.
- ^ Moriarty, Kathleen; et al. "PKCS #5: Password-Based Cryptography Specification, Version 2.1". tools.ietf.org. RFC 8018.
- ^ "Smartphone Forensics: Cracking BlackBerry Backup Passwords". Advanced Password Cracking – Insight. ElcomSoft. September 30, 2010. Retrieved October 23, 2015.
- ^ "LastPass Security Notification". The LastPass Blog. May 5, 2011. Retrieved October 23, 2015.
- ^ "Password Storage Cheat Sheet". OWASP Cheat Sheet Series. August 15, 2021. Retrieved November 7, 2021.
- ^ Moriarty, Kathleen; et al. "PKCS #5: Password-Based Cryptography Specification, Version 2.1: Section 4. Salt and Iteration Count". tools.ietf.org. RFC 8018. Retrieved January 24, 2018.
- ^ Sönmez Turan, Meltem; Barker, Elaine; Burr, William; Chen, Lily. "Recommendation for Password-Based Key Derivation Part 1: Storage Applications" (PDF). NIST. SP 800-132. Retrieved December 20, 2018.
- ^ a b 비밀번호 기반 암호화 사양 RFC 2898
- ^ Bynens, Mathias. "PBKDF2+HMAC hash collisions explained". mathiasbynens.be.
- ^ "Collision resistance - Why is HMAC-SHA1 still considered secure?". crypto.stackexchange.com.
- ^ a b 콜린 퍼시벌.스크리프"시퀀셜 메모리-하드 함수를 통한 강력한 키 파생"에 나와 있습니다.2009년 5월 BSDCan'09에서 발표되었습니다.
- ^ "New 25 GPU Monster Devours Passwords In Seconds". The Security Ledger. December 4, 2012. Retrieved September 7, 2013.
- ^ "패스워드 해싱 경쟁"
- ^ "Digital Identity Guidelines Authentication and Lifecycle Management Section 5.1.1.2" (PDF). NIST. SP 800-63B. Retrieved June 18, 2021.
외부 링크
- "PKCS #5 v2.1" (PDF). RSA Laboratories. Archived from the original (PDF) on April 11, 2017.
- RFC 2898 – PKCS #5 v2.0 사양
- RFC 6070 – HMAC-SHA1을 사용한PBKDF2의 테스트 벡터
- NIST 특별 간행물 800-132 암호 기반 키 파생 권장 사항