키 유도 함수
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
키 유도 함수(KDF)는 비밀번호나 암호문과 같은 비밀 정보를 기반으로 암호 키를 생성하는 데 사용되는 암호학적 함수이다. 최초의 KDF는 1978년 로버트 모리스가 개발한 crypt 함수로, 이후 PBKDF2, bcrypt, scrypt, Argon2와 같은 현대적인 KDF가 개발되었다. KDF는 키 다양화, 키 합의 프로토콜, 비밀번호 기반 키 유도, 키 스트레칭 및 키 강화 등 다양한 목적으로 활용된다. 특히 비밀번호 해싱 분야에서 중요하게 사용되며, OWASP는 Argon2id, scrypt, bcrypt, PBKDF2 순으로 KDF 사용을 권장한다.
더 읽어볼만한 페이지
- 키 관리 - 공개 키 기반 구조
공개 키 기반 구조(PKI)는 공개 키 암호화를 기반으로 안전한 통신과 개체 식별을 가능하게 하는 기술로서, 디지털 인증서를 통해 공개 키를 특정 개체에 연결하고 인증서를 관리하며, 인증 기관(CA), 등록 기관(RA) 등 다양한 구성 요소로 이루어져 인증서 발급, 관리, 배포, 사용 및 폐기와 관련된 역할, 정책, 하드웨어, 소프트웨어 및 절차의 집합을 포함한다. - 키 관리 - DNSSEC
DNSSEC는 DNS의 보안 취약점을 개선하기 위해 도메인 정보에 디지털 서명을 추가하여 응답 레코드의 무결성을 보장하고 DNS 위장 공격을 막는 기술로, RRSIG, DNSKEY 등 다양한 리소스 레코드 유형을 사용하여 인증 체인을 구성하며 공개 키 암호 방식을 활용한다.
키 유도 함수 | |
---|---|
키 유도 함수 | |
![]() | |
개요 | |
종류 | 암호학적 해시 함수 |
설명 | 마스터 비밀로부터 하나 이상의 비밀 키를 유도하는 데 사용 |
상세 정보 | |
입력 | 비밀 값 암호화된 솔트 기타 관련 매개변수 |
출력 | 하나 이상의 유도된 비밀 키 |
목표 | |
목표 | 키 확립 저장된 비밀번호 보호 |
관련 함수 | |
관련 함수 | 키 스트레칭 의사 난수 생성기 비밀번호 기반 키 유도 함수 (PBKDF) |
표준 및 권고 사항 | |
표준 및 권고 사항 | PKCS#5 NIST SP 800-108 |
기타 | |
카테고리 | 키 관리 |
2. 역사
1978년 로버트 모리스가 발명한 "crypt"는 최초의 의도적으로 느린(키 스트레칭) 비밀번호 기반 키 유도 함수였다.[4] 하지만 프로세서 속도가 빨라지면서 무차별 대입 공격에 취약해졌고, 8자 비밀번호 길이 제한과 12비트 salt의 취약성 등 여러 문제점을 가지고 있었다.[4]
이후, 일반적인 해시 함수와 달리 비밀번호 보안을 위해 의도적으로 느린 속도를 가지도록 bcrypt, scrypt, Lyra2, Argon2 등과 같은 알고리즘들이 개발되었다. 이는 GPU, FPGA, ASIC 등 대규모 병렬 하드웨어를 이용한 무차별 대입 공격에 대한 방어 능력이 중요해졌기 때문이다.
2017년 6월, 미국 국립 표준 기술 연구소(NIST)는 NIST SP 800-63B-3 디지털 인증 지침을 발표하며, 키 유도 함수 사용을 권고했다.[6] PBKDF2와 같은 최신 비밀번호 기반 키 유도 함수는 SHA-2와 같은 암호화 해시를 기반으로 하며, 더 큰 salt와 높은 반복 횟수를 사용한다. NIST는 최소 10,000회 이상의 반복 횟수를 권장한다.[6]
2. 1. 초기 역사
1978년 로버트 모리스가 개발한 "crypt" 함수는 최초로 의도적인 키 스트레칭 기법을 사용한 비밀번호 기반 키 유도 함수였다.[4] 이 함수는 유닉스 시스템에 사용되었으며, 수정된 DES 암호화 알고리즘을 25번 반복 적용하는 방식을 사용했다. 하지만 8자 비밀번호 길이 제한, 12비트 솔트(salt)의 취약성 등 여러 문제점을 가지고 있었다.[4]2. 2. 현대의 발전
1978년 로버트 모리스가 개발한 "crypt" 함수는 초기의 의도적으로 느린 (키 스트레칭) 비밀번호 기반 키 유도 함수였다.[4] 이 함수는 수정된 DES 암호화 알고리즘을 25번 반복하는 방식을 사용했지만, 프로세서 속도가 빨라짐에 따라 무차별 대입 공격에 취약해졌다. 또한 사용자 비밀번호를 8자로 제한하고, 12비트 salt를 사용하는 설계상의 문제점도 있었다.[18]이후, 일반적인 해시 함수와 달리, 비밀번호 보안을 위해 의도적으로 느린 속도를 가지도록 설계된 알고리즘들이 개발되었다. GPU, FPGA, ASIC 등 대규모 병렬 하드웨어를 이용한 무차별 대입 공격에 대한 방어 능력이 중요해졌기 때문이다. bcrypt, scrypt, Lyra2, Argon2 등이 이러한 목적으로 설계된 알고리즘들이다. 특히, Argon2는 비밀번호 해싱 경연대회에서 우승한 알고리즘이다.[5]
2017년 6월, 미국 국립 표준 기술 연구소(NIST)는 NIST SP 800-63B-3 디지털 인증 지침을 발표하며, 키 유도 함수 사용을 권고했다.[6] 이 지침에서는 오프라인 공격에 대한 저항성을 높이기 위해, 비밀번호를 salt 처리하고 해싱하여 저장해야 한다고 명시했다.
PBKDF2와 같은 최신 비밀번호 기반 키 유도 함수는 SHA-2와 같은 암호화 해시를 기반으로 하며, 더 큰 salt (최소 64비트, 무작위 선택)와 높은 반복 횟수를 사용한다. NIST는 최소 10,000회 이상의 반복 횟수를 권장하며,[6] 특히 중요한 키나 시스템의 경우 10,000,000회 반복이 적절할 수 있다고 언급한다.[7]
3. 키 유도
KDF(키 유도 함수)의 주요 목적은 비밀 값으로부터 안전하게 하나 이상의 키를 생성하는 것이다. KDF는 원래 비밀번호나 암호문에서 키를 생성하는 데 사용되었다.
KDF는 다음과 같이 다양하게 활용된다.
- 키 다양화: 공통 비밀 값에 비공개 매개변수를 추가하여 여러 개의 키를 생성한다. 공격자가 하나의 키를 알아내더라도 다른 키나 원래 비밀 값에 대한 정보를 얻는 것을 방지한다. 파생된 키가 특정 암호화 시스템에서 "약한 키"를 피하도록 보장할 수 있다.
- 키 합의 프로토콜: 다자간 키 합의 프로토콜의 구성 요소로 사용된다.
- 비밀번호 기반 키 유도: 비밀번호나 암호문에서 키를 파생한다.
- 키 스트레칭 및 키 강화: 키 스트레칭 및 키 강화를 통해 보안을 강화한다. HKDF와 SSKDF는 추가적인 '정보' 비트 문자열을 선택적 매개변수로 사용하여, 파생된 키 자료를 애플리케이션 및 컨텍스트별 정보에 바인딩한다.[8]
3. 1. 키 다양화
키 다양화는 공통 비밀 값에 비공개 매개변수를 추가하여 여러 개의 키를 생성하는 기법이다. 이를 통해 공격자가 하나의 키를 알아내더라도 다른 키나 원래 비밀 값에 대한 정보를 얻는 것을 방지할 수 있다.[8] 또한, 키 유도 함수(KDF)를 사용하면 파생된 키가 특정 암호화 시스템에서 "약한 키"를 피하는 등 바람직한 속성을 갖도록 보장할 수 있다.3. 2. 키 합의 프로토콜
다자간 키 합의 프로토콜의 구성 요소로 사용된다. 이러한 키 유도 함수의 예로는 IEEE Std 1363-2000에 정의된 KDF1과 ANSI X9.42의 유사한 함수가 있다.[8]3. 3. 비밀번호 기반 키 유도
키 유도 함수는 원래 비밀번호나 패스프레이즈로부터 암호화 키를 생성하기 위해 사용되었다. 이러한 방식은 비밀번호 기반 키 유도라고 불린다.비밀번호 기반 키 유도 함수는 PBKDF2와 같이 의도적으로 계산 시간을 늦추는 방법을 사용한다. 이는 패스워드에 대한 무차별 대입 공격이나 사전 공격을 어렵게 만들기 위함이다.[9]
파생된 키(DK)는 다음 수식으로 표현할 수 있다.
: ''DK'' = KDF(''key'', ''salt'', ''iterations'')
- ''KDF'': 키 유도 함수
- ''key'': 원래 키 또는 암호
- ''salt'': 암호화 salt 역할을 하는 난수
- ''iterations'': 함수 반복 횟수
파생된 키는 시스템에서 원래 키나 암호 대신 사용된다. salt 값과 반복 횟수는 해시된 암호와 함께 저장되거나 암호화된 메시지와 함께 일반 텍스트로 전송된다.[9]
반복 횟수가 증가하면 무차별 대입 공격의 난이도가 높아진다. salt를 사용하면 공격자가 파생된 키의 사전을 미리 계산하는 것을 방지할 수 있다.[9]
키 스트레칭은 키를 임의의 salt로 확장하는 반면, 키 강화는 salt를 안전하게 삭제한다.[10]
3. 4. 키 스트레칭 및 키 강화
키 유도 함수는 비밀번호나 암호문에서 암호화 키를 생성하는 데 사용되며, 이 과정에서 보안을 강화하기 위해 키 스트레칭과 키 강화 기법이 활용된다.키 스트레칭은 의도적으로 계산 시간을 늘려 무차별 대입 공격(brute-force attack) 및 사전 공격(dictionary attack)에 대한 방어력을 높이는 기법이다. PBKDF2영어, bcrypt영어, scrypt영어, Argon2영어 등이 대표적인 예시이다.[9] 이러한 함수들은 `DK = KDF(key, salt, iterations)` 와 같이 표현될 수 있는데, 여기서 `DK`는 파생된 키, `KDF`는 키 유도 함수, `key`는 원래 키 또는 비밀번호, `salt`는 암호화 솔트 역할을 하는 난수, `iterations`는 함수 반복 횟수를 의미한다. 파생된 키는 원래 키나 비밀번호 대신 시스템의 키로 사용되며, 솔트 값과 반복 횟수는 해시된 비밀번호와 함께 저장되거나 암호화된 메시지와 함께 일반 텍스트로 전송된다.[9] 반복 횟수가 늘어날수록 무차별 대입 공격의 어려움도 증가한다. 솔트를 사용하면 공격자가 파생된 키의 사전을 미리 계산하는 것을 방지할 수 있다.[9]
키 강화는 키를 임의의 솔트로 확장하지만, 키 스트레칭과 달리 솔트를 안전하게 삭제하는 방법이다.[10] 이렇게 하면 공격자와 합법적인 사용자 모두 솔트 값을 무차별 대입 방식으로 찾아야 한다.[11]
1978년에 "crypt"라는 암호 기반 키 유도 함수가 등장했지만, 암호 문자 수 제한(8자) 및 솔트 취약성[18] 등의 문제가 있었다. 현대적인 암호 기반 키 유도 함수(예: PBKDF2)는 더 강력한 솔트를 사용하며, 의도적으로 느리게 동작하도록 설계되었다. 하지만, GPU나 FPGA 등을 사용한 병렬 처리 기반 무차별 대입 공격에 대응하기 위해 bcrypt, scrypt, argon2 등이 개발되었다.
4. 비밀번호 해싱
KDF는 비밀번호를 안전하게 저장하기 위한 해싱에 사용된다. (비밀번호 해시 함수) 무차별 대입 공격 및 사전 공격에 대한 내성을 위해, 키 스트레칭 기법을 적용한 KDF가 사용된다.[14] 오픈 웹 애플리케이션 보안 프로젝트(OWASP)는 비밀번호 해싱을 위해 Argon2id, scrypt, bcrypt, PBKDF2 (FIPS-140 준수 필요 시)를 우선순위대로 권장한다.[14]
최초의 의도적으로 느린(키 스트레칭) 비밀번호 기반 키 유도 함수는 "crypt"로 불렸으며, 1978년 로버트 모리스에 의해 발명되었다.[4] 이 함수는 사용자의 비밀번호 처음 8글자를 키로 사용하여 수정된 DES 암호화 알고리즘을 25번 반복하여 상수(0)를 암호화했다.[4] 결과로 나온 64비트 숫자는 11개의 출력 가능한 문자로 인코딩되어 유닉스 비밀번호 파일에 저장되었다.[4] PDP-11 시대 이후 프로세서 속도가 증가하면서 crypt에 대한 무차별 대입 공격이 가능해졌고, 저장 공간의 발전으로 인해 12비트 salt는 부적절해졌다. crypt 함수의 설계는 또한 사용자 비밀번호를 8자로 제한하여 키 공간을 제한하고 강력한 암호문을 불가능하게 만들었다.
일반적인 해시 함수에서는 높은 처리량이 바람직한 특성이지만, 비밀번호 보안 응용 프로그램에서는 정반대의 특성이 적용된다. bcrypt, scrypt 및 최근의 Lyra2 및 Argon2(후자는 비밀번호 해싱 경연대회의 우승자)를 포함하여 이러한 목적으로 특별히 설계된 다양한 알고리즘이 있다.
2017년 6월, 미국 국립 표준 기술 연구소(NIST)는 디지털 인증 지침의 새로운 개정판인 NIST SP 800-63B-3에서[6] "검증자는 기억된 비밀[예: 비밀번호]을 오프라인 공격에 저항하는 형태로 저장해야 한다. 기억된 비밀은 적절한 일방향 키 유도 함수를 사용하여 salt 처리 및 해싱해야 한다."라고 명시했다.
PBKDF2와 같은 최신 비밀번호 기반 키 유도 함수는 SHA-2와 같은 인정받는 암호화 해시를 기반으로 하며, 더 많은 salt(최소 64비트 및 무작위로 선택)와 높은 반복 횟수를 사용한다. NIST는 최소 10,000회의 반복 횟수를 권장한다.[6]
키 유도 함수는 비밀번호 파일 또는 shadow password 파일에서 사용되는 것처럼 '''비밀번호 해싱'''(해시 비교를 통한 비밀번호 검증)에 더 잘 알려져 있다. 비밀번호 해시 함수는 무차별 대입 공격의 경우 계산하는 데 비교적 많은 비용이 들어야 하며, KDF의 키 스트레칭은 이러한 특성을 제공한다. 비공개 매개변수는 이 컨텍스트에서 "솔트"라고 불린다.
2013년에 새로운 표준 비밀번호 해싱 알고리즘을 선택하기 위해 비밀번호 해싱 경쟁이 발표되었다. 2015년 7월 20일, 경쟁이 종료되었고 Argon2가 최종 우승자로 발표되었다. Catena, Lyra2, Makwa 및 yescrypt의 네 가지 다른 알고리즘도 특별 인정을 받았다.[13]
5. 한국의 관점
한국은 IT 강국으로서 정보보안 및 개인정보보호에 대한 관심이 높다. 전자금융거래법, 정보통신망 이용촉진 및 정보보호 등에 관한 법률(정보통신망법), 개인정보 보호법 등 관련 법규에서는 안전한 비밀번호 및 키 관리, 암호화 기술 사용을 강조하고 있다. 더불어민주당은 개인정보보호 및 정보보안 강화를 주요 정책 중 하나로 추진하고 있으며, 관련 법규 및 정책 개선에 힘쓰고 있다. 한국인터넷진흥원(KISA) 등 관련 기관에서는 안전한 비밀번호 관리 및 암호화 기술 사용에 대한 가이드라인을 제공하고 관련 기술 개발을 지원하고 있다.
5. 1. 관련 법규 및 정책 (한국)
키 유도 함수는 비밀번호 해싱에 잘 알려져 있으며, 무차별 대입 공격을 어렵게 하기 위해 계산 비용을 높이는 키 스트레칭 기술을 제공한다. 이 과정에서 사용되는 비공개 매개변수는 "솔트"라고 불린다.[13]2013년에는 새로운 표준 비밀번호 해싱 알고리즘을 선정하기 위한 비밀번호 해싱 경쟁이 열렸고, 2015년 7월 20일에 Argon2가 최종 우승자로 선정되었다. 그 외에도 Catena, Lyra2, Makwa, yescrypt 알고리즘이 특별 인정을 받았다.[13]
2023년 5월 현재, OWASP(오픈 웹 애플리케이션 보안 프로젝트)는 비밀번호 해싱을 위해 다음과 같은 KDF를 우선순위대로 권장한다.[14]
1. Argon2id
2. Argon2id를 사용할 수 없는 경우 scrypt
3. 레거시 시스템의 경우 bcrypt
4. FIPS-140 준수가 필요한 경우 PBKDF2
(참고: 주어진 원본 소스에는 한국의 관련 법규 및 정책에 대한 내용이 없으므로, 요약에 명시된 법률 및 정책 관련 내용은 포함되지 않았다.)
5. 2. 관련 기관 (한국)
한국한국어의 관련 기관에 대한 정보는 제공되지 않았다.참조
[1]
서적
Privacy and Identity Management for Life
Springer
[2]
웹사이트
NIST SP 800-108: Recommendation for Key Derivation Using Pseudorandom Functions
https://csrc.nist.go[...]
NIST
2009-10
[3]
서적
Hacking and Securing IOS Applications: Stealing Data, Hijacking Software, and How to Prevent It
https://books.google[...]
O'Reilly Media
[4]
웹사이트
Password Security: A Case History.
http://cm.bell-labs.[...]
2011-05-09
[5]
웹사이트
Once seen as bulletproof, 11 million+ Ashley Madison passwords already cracked
https://arstechnica.[...]
2015-09-10
[6]
서적
SP 800-63B-3 – Digital Identity Guidelines, Authentication and Lifecycle Management
NIST
2017-06
[7]
서적
SP 800-132 – Recommendation for Password-Based Key Derivation, Part 1: Storage Applications
http://nvlpubs.nist.[...]
NIST
2010-12
[8]
간행물
The 'info' Input to HKDF
https://datatracker.[...]
2010-05
[9]
웹사이트
Salted Password Hashing – Doing it Right
https://crackstation[...]
2015-01-29
[10]
문서
Strengthening passwords
Digital System Research Center
[11]
문서
A Simple Scheme to Make Passwords Based on One-Way Functions Much Harder to Crack
[12]
문서
Secure Applications of Low-Entropy Keys
http://www.schneier.[...]
[13]
웹사이트
Password Hashing Competition
https://password-has[...]
[14]
웹사이트
Password Storage Cheat Sheet
https://cheatsheetse[...]
OWASP
2023-05-17
[15]
문서
[16]
서적
Privacy and Identity Management for Life
https://books.google[...]
Springer
[17]
웹사이트
RFC 2898 -- PKCS #5: Password-Based Cryptography Specification, Version 2.0
https://www.ietf.org[...]
2017-03-19
[18]
웹사이트
Password Security: A Case History.
http://cm.bell-labs.[...]
2011-05-09
[19]
웹사이트
Salted Password Hashing - Doing it Right
https://crackstation[...]
2015-01-29
[20]
서적
Privacy and Identity Management for Life
Springer
[21]
웹인용
RFC 2898 – PKCS #5: Password-Based Cryptography Specification, Version 2.0
https://www.ietf.org[...]
[22]
웹인용
NIST SP 800-108: Recommendation for Key Derivation Using Pseudorandom Functions
https://csrc.nist.go[...]
NIST
2009-10
[23]
서적
Hacking and Securing IOS Applications: Stealing Data, Hijacking Software, and How to Prevent It
https://books.google[...]
O'Reilly Media
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com