키 분배·수명주기·안전한 난수
KDC·공개키 기반 키 분배, 키 계층과 수명주기, 난수의 요구사항을 정리합니다.
1. 키의 역할을 구분한다
| 구분 | 역할 |
|---|---|
| 장기키 | 오랫동안 신원 인증·키 설정 등에 사용하는 키 |
| 세션키 | 한 연결·거래·기간 동안 데이터를 보호하는 일시적 키 |
| CEK/DEK | 실제 데이터 콘텐츠를 암호화하는 키 |
| KEK | 다른 키를 암호화하거나 래핑하는 키 |
| 서명키 | 전자서명 생성에 사용하는 개인키 |
| 검증키 | 전자서명 검증에 사용하는 공개키 |
하나의 키를 암호화·MAC·서명 등 여러 용도로 섞어 쓰면 사고 범위가 커지고 분석이 어려워진다. 가능한 경우 용도별로 키를 분리한다.
2. 대표적인 키 설정·분배 방식
2.1 직접·물리적 분배
키를 안전한 오프라인 수단, 별도 채널, 보안 매체로 직접 전달한다. 소규모나 초기 키 설정에는 가능하지만 규모가 커지면 관리가 어렵다.
2.2 KDC 기반 대칭키 분배
각 사용자가 키 분배센터(KDC)와 장기 비밀키를 공유하고, KDC가 통신 당사자에게 세션키를 안전하게 전달한다.
- 장점: 모든 사용자 쌍이 장기키를 직접 공유할 필요가 없다.
- 위험: KDC가 고가치 신뢰 지점이며 장애·침해 영향이 크다.
- 대표 응용: Kerberos의 AS·TGS 구조
2.3 공개키 기반 키 운반
한쪽이 세션키를 생성하고 상대방의 공개키로 보호해 전달한다. 공개키가 실제 상대방의 것인지 확인하지 않으면 중간자 공격에 취약하다.
2.4 Diffie-Hellman 계열 키 합의
양쪽이 각자 비밀값을 기여해 같은 공유 비밀을 계산한다. 공유 비밀은 보통 KDF를 거쳐 실제 암호키로 사용한다. 공개값의 상대방 인증이 없으면 중간자 공격이 가능하다.
2.5 하이브리드 암호
공개키 기술로 세션키를 운반하거나 합의하고, 대용량 데이터는 빠른 대칭키 암호로 보호한다.
3. 키 래핑과 키 계층
키 래핑(key wrapping)은 KEK로 CEK 같은 키 재료를 기밀성·무결성과 함께 보호하는 방식이다.
데이터 암호문 = Encrypt_CEK(Data)
래핑된 CEK = Wrap_KEK(CEK)
KEK를 교체할 때 CEK 자체를 바꾸지 않고 새 KEK로 CEK만 다시 래핑할 수 있다. 반대로 CEK가 유출되면 해당 CEK로 보호한 데이터의 재암호화가 필요할 수 있다.
4. 키 수명주기와 암호기간
키는 다음 상태를 거친다.
- 생성
- 등록·분배
- 활성 사용
- 교체·비활성화
- 필요한 경우 과거 데이터 처리용 보관
- 폐기
암호기간(cryptoperiod)은 한 키를 특정 용도로 사용할 수 있도록 정한 기간이다. 키를 오래 사용할수록 유출 시 영향을 받는 데이터가 많아지고 공격자가 분석할 암호문도 늘어난다.
키 손실과 키 유출은 다르다
- 키 손실: 필요한 데이터를 복호화하거나 업무를 계속할 수 없는 가용성 문제
- 키 유출: 공격자가 암호문을 복호화하거나 서명을 위조할 수 있는 기밀성·인증 문제
복호화키는 업무 연속성을 위해 통제된 백업이 필요할 수 있지만, 서명용 개인키의 백업은 부인방지와 오용 위험을 고려해야 한다.
5. 안전한 난수의 핵심
암호키·nonce·IV·salt는 모두 무작위값처럼 보일 수 있지만 요구사항이 다르다.
| 값 | 핵심 요구 |
|---|---|
| 암호키 | 충분한 엔트로피와 예측 불가능성 |
| nonce | 정해진 범위에서 반복되지 않음; 프로토콜에 따라 예측 불가능성도 요구 |
| IV | 운영 모드별 고유성 또는 예측 불가능성 조건 |
| salt | 사용자·레코드마다 고유하도록 생성; 비밀일 필요는 없음 |
| OTP seed | 비밀성과 충분한 무작위성 |
출력 길이가 길다고 엔트로피가 큰 것은 아니다. 공격자가 생성 날짜를 알고 있고 하루의 초 단위 시각만 seed 후보라면 가능한 값은 최대 86,400개다. 다른 비밀 정보가 없다면 후보를 모두 시험할 수 있다.
가능한 seed 수 = 86,400
정보량 ≈ log2(86,400) ≈ 16.4비트
통계적으로 균등해 보이는 출력도 seed와 내부 상태가 예측 가능하면 암호용 난수로 안전하지 않다.
키 분배센터와 n명이 각각 장기키 하나를 공유하면 사용자–KDC 장기키는 n개다. 모든 사용자 쌍의 직접 공유에 필요한 n(n−1)/2개와 조건이 다르다. 세션키·키 계층에 필요한 키 수는 별도로 계산한다.
개념 확인 문제
문제를 누르면 바로 아래에서 정답과 해설을 확인할 수 있습니다.
01KEK와 CEK의 역할이 어떻게 다른가?
CEK는 실제 데이터 콘텐츠를 암호화하고, KEK는 CEK 같은 키 재료를 보호·래핑한다. CEK가 안전하다면 KEK 교체 시 데이터 전체 대신 CEK 재래핑으로 처리할 수 있다.
02출력은 256비트인데 비밀 seed 후보가 알려진 하루의 초 86,400가지뿐이면 256비트 엔트로피인가?
아니다. 다른 비밀 정보가 없으면 후보 공간의 최대 정보량은 log2(86,400), 약 16.4비트다. 출력 길이와 원천 엔트로피를 구분한다.