키 관리 및 해쉬함수
키 관리 및 분배 프로토콜
키 관리 (Key Management)
-
암호시스템에서 사용되는 암호학적 키들을 안전하게 다루기 위한 키의 생성, 등록, 확인,
분배, 설치, 저장, 파생, 보관, 취소, 말소, 폐기 등과 같은 일련의 절차를 제공함 -
아래와 같은 사항을 사전에 방지하기 위하여 키 또는 키와 관련된 정보를 안전하게 유지함
- 비밀키 또는 개인키의 외부노출
- 키의 불법적 변조
- 유효기간이 지났거나 이미 취소된 키의 불법적인 사용
분류 | 설명 |
---|---|
세션키(Session Key) | * 일반적으로 메시지의 비밀성과 무결성을 유지하기 위해 비밀키 암호에 사용되는 키 * 매 session 마다 새롭게 설정 |
키-암호화키 (Key-Encryption Key) | * 세션키 성정 또는 설정된 세션키의 저장에 사용되는 비밀키 또는 개인키 |
마스터키 | * 응용분야에 따라 키-암호화 키를 보호하는 다른 유형의 키 |
용어 | 의미 |
---|---|
키 생성 | 강한 안전성을 가진 키를 안전하게 생성할 수 있는 절차 |
키 등록 | 키와 사용자를 연결시키는 서비스로 키 등록기관이 제공 |
키 확인서 생성 | 공개키와 사용자의 연관성을 보장하는 것이며, 인증기관에 의해 제공됨 |
키 분배 | 인가된 사용자들에게 키 관리 정보 객체들을 안전하게 제공해주는 일련의 절차 제공 |
키 설치 | 키를 사용하기 전에 항상 필요한 절차로서 키 관리 설비내에서 키가 위험하지 않은 방식으로 배치함 |
키 복구 | 암호문을 해독할 수 있는 키 또는 키와 관련된 정보를 제 3자에게 위탁 시키고 일정한 조건 하에 위탁된 키나 정보를 권한있는 사람에게 전송하는 것 |
키 저장 | 미래에 사용하거나 백업을 위해 생성된 키들을 안전하게 저장해 주는 서비스 |
키 파생 | 비밀 근원 키를 이용하여 다른 새로운 세션키인 파생키를 생성하는 작업 |
키 보관 | 일반적인 사용 후에 키를 안전하게 보관하기 위한 일련의 절차 |
키 취소 | 키의 노출, 확인서 사용 간의 만료 등과 같은 경우 사용자의 키를 취소하는 절차를 제공 |
키 말소 | 키와 사용자의 연결을 단절시켜주는 서비스 |
키 폐기 | 더 이상 사용될 필요가 없는 키들을 안전하게 폐기하기 위한 일련의 절차를 제공 |
키 설정 (Key Establishment)
- 암호 방식을 구현하기 위하여 둘 또는 더 많은 사용자나 또는 모듈 안에서 안전하게 비밀정보가 만들어지는 과정
키 공유 (Key Agreement)
- 둘 또는 더 많은 사용자가 공개된 통신로를 통하여 공동으로 비밀키를 설정하는 기술
- 어떤 한 쪽에서 독립적으로 비밀정보를 미리 결정하지 않는다.
- Diffie-Hellman 키 공유 프로토콜
키 전송 (Key Transport)
- 한 사용자 또는 기관이 비밀키를 설정하여 다른 사용자에게 안전하게 키를 전달하는 기술
- KEM (Key Encapsulation Mechanism)
키 유도 (Key Derivation Function)
- 비밀정보(마스터키, 패스워드, 키 공유)로 부터 각종 정보보호 알고리즘 실행을 위하여
필요로 하는 다양한 키(Keying-Materiial)들을 유도해내는 함수(메커니즘)
키 사전 분배 (Key Pre-distribution)
- 신뢰하는 키 관리 기관 (TA: Trusted Authority)이 사전에
임의의 두 사용자에게 비밀 경로를 통하여 임의의 키를 선택하여 전달하는 방법 - TA와 네트워크 상의 모든 사용자 사이에 안전한 통로가 필요함
- 사용자가 많은 경우에 많은 키를 관리해야 하는 문제점을 가진다.
- n명의 사용자가 있다면 각 사용자는 n-1가지 키를 관리해야하며,
TA는 n(n-1)/2가지 키를 관리하여야 하므로, 매우 복잡하며 관리 비용이 많이 지불됨
중앙집중식 키분배
- 네트워크 사용자 쌍방 간에 비밀 통신을 원할 때마다 키 관리기관인 키분배센터(KDC)
또는 TA(TA)에 의하여 새로운 키(세션키)가 분배되는 방식 - 대칭키 암호 방식에 기반 : Kerberos
- 공개키 암호 방식에 기반 : Diffie-Hellman, STS, MTI, Girault 키 공유 프로토콜
Kerberos 키 분배
- 대칭키 암호 방식에 기반을 둔 대표적인 중앙 집중식 키 분배방식으로
사용자와 키분배센터(KDC 또는 TA)를 이용하는 방식 - MIT의 Project Athena 팀에 의해 개발된 인증(Authentification) 및 키 분배 프로토콜
Kerberos, Diffie-Hellman 키 분배 프로세스 알아보기
난수발생기와 키 유도 함수
난수 (Random Number)
- 주어진 구간에서 통계적으로 독립적이고 예측 불가능하며 편증되지 않은 수
- 예측 불가능 (Unpredictable) : 이전 출력을 안다고 하여도 이후의 출력 값을 예측할 수 없어야 함
- 독립적 (Independent) : 이전 출력된 난수와 다음 출력될 난수에 영향을 미치지 않음
- 편증되지 않음 (Unbiased) : 특정한 수가 나타날 확률이 더 높지 않아야 함
균일한 동전을 연속적으로 던지는 시행과 대응하는 비트 수열 생성
실난수 (True Random Number)
- 물리적인 과정이나 자연에 의하여 생성되는 잡음원으로부터 얻어지는 난수
- thermal noise, white noise, 주사위, lotto…
의사난수 (Pseudorandom Number)
- 난수와 구별할 수 있는 효율적인 알고리즘이 존재하지 않는 수로
주어진 초기값(seed)으로부터 결정적 알고리즘을 통해 생성됨 - 블록암호 이용한 난수발생기, Hash 함수를 이용한 난수발생기, ANSII X9.17, FIPS 186-2
RNG (Random Number Generator)
-
물리적 현상을 랜덤성을 이용하여 Non-deterministic source (Entropy Source)
사용하여 비트 수열 생성 -
RNG 출력 수열은 보정을 통해서 랜덤 수열로 직접 사용하거나,
PRNG(의사 난수 생성기)의 입력으로 사용가능 -
비결정논적 난수발생기라고도 함
-
매우 높은 엔트로피(정보의 불확실성)를 갖는 방면 높은 엔트로피를 갖는 잡음을 얻기가 쉽지 않고
다양한 플랫폼에 적용하기 쉽지 않음
PRNG (Pseudorandom Random Number Generator)
- Seed라 불리는 입력을 사용하여 효율적으로 의사난수 생성
- Deterministic Random Bit Generator(DRBG) 또는 DRNG 라고도 함
- 짧은 길이의 Sedd 값을 입력하여 결정론적 알고리즘에 의해 의사난수를 생성함
- 상대적으로 엔트로피는 낮지만 결정론적 알고리즘이 안전하다면 충분한 안전성을 제공함
- PRBG의 안전성은 Seed 값에 의존함
- Seed 값으로 RNG의 출력 비트를 사용
Generation of Seed Input to PRNG
Entropy Source -> TRNG -> (Seed) -> PRNG -> Pseudorandom bit stream
키 유도 함수 (Key Derivation Function, KDF)
-
비밀정보(마스터키, 패스워드, 키 공유)로부터 각종 정보보호 알고리즘 실행을 위하여
필요로 하는 다양한 키들(keying-material)을 유도해내는 메커니즘 -
키확장 기능을 제공하며, 단일키 (마스터키 또는 키 유도키)로부터 여러 개의 키를
생성하는 것을 가능하게 해준다.
비밀번호 + 공개된 정보 => 키 유도함수 (KDF) => 여러 개의 키
키 유도함수 용도 및 특징
- 자동화된 키 설정 방식, 또는 사전-공유된 키를 통해 설정된 키로부터 추가적인 키를 얻기 위해 사용
- 직접적으로 마스터 키가 사용되길 원하지 않을 떄 이용
- 마스터키(또는 키유도키)와 외부 입력값을 통해 키 생성
- 마스터키(또는 키유도키)는 비밀값, 외부 입력값은 공개값으로 설정
- 용도에 따라 세션키, 인증키, 암호화키 등을 생성함
소스
-> (랜덤 추출기) -> 마스터키 키 유도키 + (외부 입력 값) -> 키 유도 함수 -> 세션키, 인증키, 암호화 키
해시 함수 기반 키 유도함수
- 해시 함수를 이용하여 출력된 결과값을 연접하여 키를 유도함
ISO-18033-2
,IEEE P1363a[2]
,PKCS#1 v2.1[3]
,ANSI X9.42
,
NIST SP800-56A
,IEEE 802.11i
- 무선 LAN의 KDF
블록암호 기반 키 유도함수
- 핵심함수로 AES, SAFER+ 등이 사용됨
- 무선환경의 표준 3GPP TR 35.909, IEEE 802.15.1
- 유럽의 비동기식 제3세대 무선통신, Bluetooth 유도함수
- 운영모드에 따라 counter, feedback, double-pipeline, iteration 모드로 분류 (NIST SP800-108)
패스워드 기반 키 유도 함수
- 패스워드(P), Salt(S), 반복함수(C)를 이용하여 키를 유도함
- PKCS#5, NIST SP800-132
해시함수
일방향 함수 (One-way Function)
- 변수를 통해 함수 값을 구하는 연산은 쉽지만 함수 값으로부터 변수 값을 구하는 것은 매우 어려운 함수
- 주어진 x에 대해 f(x)를 구하는 것은 쉽지만, y=f(x)가 주어지고 x를 값을 구하는 것은 매우 어려운 함수
- 해시 함수, f(x) = g^x (이산대수문제), 인수분해문제
충돌 (Collision)
-
서로 다른 입력 값에 대하여 동일한 해시 값이 출력되는 경우
-
충돌쌍(collision-pair)
- 충돌이 일어나도록 하는 메시지들의 쌍
- x != x’인 x, x’에 대하여 일방향 함수 H(x) = H(x’)일 때 (x, x’)은 충돌쌍임
-
일방향 함수는 충돌쌍을 찾기가 어려워야 암호학적으로 유용함
해시 함수 (Hash Function)
- 임의의 유한 길이의 입력 값을 받아 고정된 크기의 출력값으로 바꾸는 함수
- 대표적 Hash 함수 : MD5, SHA1, HAS160, SHA2, SHA3,
- 출력값 : 해시값, 해시코드, 메시지 다이제스트, 인증자, 데이터지문, 해시체크섬
암호학적 Hash 함수의 성질
-
계산 용이성 (Ease of Computation)
- Hash 함수 h의 해시값 h(x)는 계산하기 쉬움
-
일방향성 (one-wayness)
- 주어진 임의의 출력값 y에 대해, y=h(x)을 만족하는 입력값 x를 찾는 것이 계산적으로 불가능함
- Preimage Resistance (역상 저항성)
-
약한 충돌 저항성 (Weak Collision Resistance)
- 주어진 입력값 x에 대해 h(x) = h(x’), x != x’을 만족하는 다른 입력값 x’을 만족하는
다른 입력값 x’을 찾는 것이 계산적으로 불가능함 - 두 번째 역상 저항성
- 주어진 입력값 x에 대해 h(x) = h(x’), x != x’을 만족하는 다른 입력값 x’을 만족하는
-
강한 충돌 저항성 (Strong Collision Resistance)
- h(x) = h(x’)을 만족하는 임의의 두 입력값 x, x’을 찾는 것이 계산적으로 불가능함
암호학적 Hash 함수의 용도
-
전자서명에서 사용
- 전자서명 시 전체 메시지 대신에 그 메시지를 대표하는 짧은 길이의 해시값에 서명하므로
효율성을 제공하고 동일한 서명효과를 얻기 위해 사용됨
- 전자서명 시 전체 메시지 대신에 그 메시지를 대표하는 짧은 길이의 해시값에 서명하므로
-
메시지의 무결성을 제공함
- 메시지에 해시값을 함께 보관하면 그 메시지가 변경되지 않고,
무결성을 유지한다는 것을 동일한 해시값을 갖는지 비교하여 확인할 수 있음 - 무결성을 제공하기 위해서는 강한 충돌 저항성을 갖는 해시함수이어야 함
- 메시지에 해시값을 함께 보관하면 그 메시지가 변경되지 않고,
-
패스워드를 안전하게 저장하고 유지하기 위해 사용함
- 유닉스 시스템에서 패스워드를 평문으로 관리하지 않고 대신에 그것의 해시값을 유지함
- 사용자가 패스워드를 입력하면 그것의 해시값을 계산하여 유지하고 있는 해시값과 비교하여
올바른 패스워드가 입력되었는지 검사함 - password 파일에 대한 접근 권한을 획득하더라도 해시값의 일방향성 특성 때문에 계층의 패스워드를 알 수 없음
-
스팸 메일을 막는데 사용됨
- e메일을 보내는 송신자에게 상당한 노력을 했다는 증거를 확인하기 전까지 e-메일 수신을 거부하도록 하여 스팸메일을 막도록 함
-
블록체인 등에서 원장의 무결성을 유지하는데 사용함
-
비트코인과 같은 암호화폐에서 채굴(Mining) 하는데 사용함
해시 함수의 종류
키가 없는 해시 함수
- n비트의 평문을 k비트의 키를 사용하여 m비트의 해시값 출력
전용 해시 함수 : 암호화를 위해 사용하는 함수
- Hash 만을 목적으로 최적화된 수행을 하도록 디자인된 해시 함수임
- 대표적 Hash 함수
모듈 연산을 기초로 한 해시 함수
- 압축 함수의 기반을 모듈 연산의 반복적인 수행에 두고 있는 해시 함수임
- 장점 : 내장된 모듈 연산을 사용할 수 있음
- 단점 : 속도가 빠르지 않고, 안전성의 연구에 대한 역사가 짧음
- MASH 계열 함수가 유명함
조정탐지코드 (MDC : Manipulation Detection Code)
- 키가 없는 해시 함수로 메시지 무결성 제공
키가 있는 해시 함수
메시지 인증코드 (Message Authentification Code)
- 임의 길이의 메시지를 암호화 비밀키를 사용하여 고정된 출력값을 얻는 Hash 함수임
- 일반적인 메시지 인증절차는 MAC에 의한 출력인 메시지인증코드(MAC)라는 해시 함수의 특별한 형태로서
대칭키 기술에 의해 메시지를 인증함 - 송신자와 수신자가 사전에 비밀키를 공유해야 함
- 메시지의 무결성과 인증을 동시에 수행함
- 입력값으로 메시지와 키를 받는 키가 있는 해시 함수
- 대표적으로 CBC-MAC과 HMAC 있음
CBC-MAC
- 블록 암호에 기반을 둔 가장 널리 사용되는 메시지 인증 알고리즘 (MAC)
- 블록 암호에 기반으로 한 MAC
HMAC
- Hash 함수를 기반으로 한 MAC으로 Bellare, Canetti, Krawczyk가 제안함
- 두 개의 상수 ipad와 opad를 사용한 키와 XOR함