{{위키데이터 속성 추적}}
[[암호학]]에서 '''PBKDF1''' 및 '''PBKDF2'''(Password-Based Key Derivation Function 1 및 2)는 [[무차별 대입 공격]]에 대한 취약성을 줄이는 데 사용되는 슬라이딩 계산 비용이 있는 [[키 유도 함수]]이다.<ref name="RFC3962"/>

PBKDF2는 [[RSA Laboratories]]의 PKCS([[공개 키 암호 표준]]) 시리즈, 특히 PKCS #5 v2.0의 일부이며 [[국제 인터넷 표준화 기구]]의 RFC 2898로도 게시되었다. 이는 최대 160비트 길이의 유도 키만 생성할 수 있는 PBKDF1을 대체한다.<ref>{{저널 인용|title = PKCS{{nbsp}}#5: Password-Based Cryptography Specification, Version 2.0 |url=http://tools.ietf.org/html/rfc2898#section-5.2 |id=RFC{{nbsp}}2898 |website = tools.ietf.org |access-date = 2015-10-23|first = Burt|last = Kaliski|year=2000 |doi=10.17487/RFC2898 |author-link=Burt Kaliski|doi-access=free }}</ref> 2017년에 게시된 RFC 8018(PKCS #5 v2.1)에서는 비밀번호 해싱에 PBKDF2를 권장한다.<ref>{{저널 인용|id=RFC{{nbsp}}8018 |title=PKCS{{nbsp}}#5: Password-Based Cryptography Specification, Version 2.1 |first=Kathleen |last=Moriarty |editor-first1=K |editor-last1=Moriarty |display-authors=etal |url=https://tools.ietf.org/html/rfc8018 |website = tools.ietf.org|year=2017 |doi=10.17487/RFC8018 }}</ref>

== 목적 및 운영 ==
[[파일:Pbkdf2 nist.png|섬네일|비밀번호 기반 키 도출 함수 2의 반복 과정을 알고리즘으로 표현한 것이다.]]
PBKDF2는 입력된 [[비밀번호]] 또는 [[비밀구절|패스프레이즈]]에 [[솔트 (암호학)]] 값과 함께 [[HMAC]](해시 기반 메시지 인증 코드)와 같은 의사 난수 기능을 적용하고 이 과정을 여러 번 반복하여 유도 키를 생성한 후 후속 작업에서 [[키 (암호)|암호화 키]]로 사용할 수 있다. 추가된 계산 작업으로 인해 [[비밀번호 크래킹]]이 훨씬 더 어려워지며 이를 [[키 스트레칭]]이라고 한다.

2000년에 표준이 작성되었을 때 권장되는 최소 반복 횟수는 1,000회였지만, 매개변수는 CPU 속도가 증가함에 따라 시간이 지남에 따라 증가하도록 의도되었다. 2005년 [[커버로스]] 표준에서는 4,096번의 반복을 권장했다.<ref name="RFC3962">{{저널 인용|title = Advanced Encryption Standard (AES) Encryption for Kerberos 5|url = http://tools.ietf.org/html/rfc3962|website = tools.ietf.org|access-date = 2015-10-23 |first=Kenneth |last=Raeburn | year=2005 | doi=10.17487/RFC3962 |id=RFC{{nbsp}}3962|doi-access=free }}</ref> [[애플]]은 [[iOS 3]]에 2,000개, [[iOS 4]]<ref>{{웹 인용|title = Smartphone Forensics: Cracking BlackBerry Backup Passwords |work=Advanced Password Cracking – Insight |publisher=ElcomSoft |date=30 September 2010 |url=http://blog.elcomsoft.com/2010/09/smartphone-forensics-cracking-blackberry-backup-passwords/ |access-date=2015-10-23}}</ref>에 10,000개를 사용한 것으로 알려졌다. 2011년 [[라스트패스]]는 [[자바스크립트]] 클라이언트에 5,000번의 반복을 사용했고 서버 측 해싱에 100,000번의 반복을 사용했다.<ref>{{웹 인용|title = LastPass Security Notification |url=https://blog.lastpass.com/2011/05/lastpass-security-notification/|website = The LastPass Blog|date = 5 May 2011|access-date = 2023-01-31}}</ref> 2023년에 [[OWASP]]는 PBKDF2-HMAC-SHA256에는 600,000번, PBKDF2-HMAC-SHA512에는 210,000번의 반복을 사용할 것을 권장했다.<ref>{{웹 인용|date=15 August 2021 |title=Password Storage Cheat Sheet |url=https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html#pbkdf2 |url-status=live |archive-url=https://web.archive.org/web/20230123232056/https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html |archive-date=23 January 2023 |access-date=2023-01-23 |website=OWASP Cheat Sheet Series}}</ref>

비밀번호에 솔트를 추가하면 공격에 미리 계산된 해시([[레인보 테이블]])를 사용하는 능력이 줄어들고, 여러 비밀번호를 한꺼번에 테스트하는 것이 아니라 개별적으로 테스트해야 한다는 의미이다. 공개 키 암호화 표준에서는 최소 64비트의 솔트 길이를 권장한다.<ref name="RFC8018s4">{{저널 인용|id=RFC{{nbsp}}8018 |title=PKCS{{nbsp}}#5: Password-Based Cryptography Specification, Version 2.1: Section 4. Salt and Iteration Count |url = https://tools.ietf.org/html/rfc8018#section-4 |website = tools.ietf.org|access-date = 2018-01-24 |first=Kathleen |last=Moriarty |editor-first1=K |editor-last1=Moriarty |year=2017 |doi=10.17487/RFC8018 |display-authors=etal}}</ref> [[미국 국립표준기술연구소]]에서는 최소 128비트의 솔트 길이를 권장한다.<ref>{{웹 인용|id=SP{{nbsp}}800-132 |title=Recommendation for Password-Based Key Derivation Part 1: Storage Applications |url=https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf |website=NIST |access-date = 2018-12-20 |first1=Meltem |last1=Sönmez Turan |first2=Elaine |last2=Barker |first3=William |last3=Burr |first4=Lily |last4=Chen}}</ref>

== 각주 ==
{{각주}}

== 외부 링크 ==
* {{웹 인용|url=https://www.emc.com/collateral/white-papers/h11302-pkcs5v2-1-password-based-cryptography-standard-wp.pdf |archiveurl=https://web.archive.org/web/20170411220929/https://www.emc.com/collateral/white-papers/h11302-pkcs5v2-1-password-based-cryptography-standard-wp.pdf |archivedate=2017-04-11 |website=RSA Laboratories |title=PKCS{{nbsp}}#5 v2.1}}
* {{IETF RFC|2898|link=no}} – Specification of PKCS{{nbsp}}#5 v2.0.
* {{IETF RFC|6070|link=no}} – Test vectors for PBKDF2 with HMAC-SHA1.
* [http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf NIST Special Publication 800-132 Recommendation for Password-Based Key Derivation]

{{암호화 해시}}
{{암호학}}

[[분류:암호 표준]]