암호학: SESAME
암호학 SESAME 정리입니다. 공개키 기관, nonce 기반 상호 인증, session key 전달, 단계별 메시지 의미와 OpenSSL 개념 검증을 정리했습니다.
암호학: SESAME 인증 흐름과 공개키 기반 세션키 교환
SESAME은 Kerberos 계열의 중앙 인증 구조를 확장해 공개키 기반 인증과 권한 속성을 다루려는 분산 인증 시스템으로 설명된다. 실습은 A와 B가 통신하기 전에 공개키 기관을 통해 서로의 공개키를 확인하고, 난수로 상호 인증한 뒤 세션키를 전달하는 절차를 단계별로 정리했다. 여기서는 그 흐름을 표기법, 단계, 보안 의미로 나눠 운영 순서로 정리한다.
표기법
| 표기 | 의미 |
|---|---|
A, B | 통신하려는 두 주체 |
KUa, KUb | A와 B의 공개키 |
KRa, KRau | A 또는 공개키 기관의 개인키 |
E_K[x] | key K로 x를 암호화 또는 서명한 값 |
N1, N2 | 재전송 공격을 막기 위한 nonce |
Ks | 실제 통신에 사용할 session key |
전체 흐름
핵심은 세 가지다. 먼저 공개키 기관을 통해 상대 공개키를 검증한다. 다음으로 nonce를 주고받아 상대가 실제 개인키 소유자인지 확인한다. 마지막으로 세션키를 안전하게 전달해 이후 통신에 사용한다.
1. A가 B의 공개키를 요청
A -> Public Key Authority:
Request(B public key) || Time1timestamp는 오래된 공개키 응답을 재사용하는 문제를 줄이기 위해 포함한다.
2. 공개키 기관이 B의 공개키를 응답
Public Key Authority -> A:
E_KRau[ KUb || Request || Time1 ]A는 공개키 기관의 공개키로 이 값을 검증한다. 검증이 성공하면 B의 공개키가 기관에 의해 확인된 값이라고 판단할 수 있다.
3. A가 B에게 인증 시작
A -> B:
E_KUb[ IDA || N1 ]A는 B의 공개키로 자신의 식별자와 nonce N1을 보낸다. B의 개인키를 가진 주체만 이 값을 복호화할 수 있어야 한다.
4. B가 A의 공개키를 요청
B -> Public Key Authority:
Request(A public key) || Time25. 공개키 기관이 A의 공개키를 응답
Public Key Authority -> B:
E_KRau[ KUa || Request || Time2 ]B도 공개키 기관의 응답을 검증해 A의 공개키를 신뢰한다.
6. B가 A에게 응답
B -> A:
E_KUa[ N1 || N2 ]B가 N1을 되돌려 보내면 A는 B가 앞 단계의 메시지를 복호화했다는 사실을 확인한다. 동시에 B는 새 nonce N2를 보내 A의 응답을 요구한다.
7. A가 B에게 N2 응답
A -> B:
E_KUb[ N2 ]B는 N2가 정확히 돌아왔는지 확인해 A가 올바른 개인키를 가진 주체라고 판단한다.
8. 세션키 전달
A -> B:
E_KUb[ E_KRa[ Ks ] ]표기에서는 A가 세션키 Ks를 자신의 개인키로 보호한 뒤, 다시 B의 공개키로 감싸 B에게 전달하는 구조로 설명한다. 실제 프로토콜 설계에서는 서명과 암호화를 어떤 순서로 적용할지, 어떤 알고리즘을 사용할지, replay 방지를 어떻게 할지 명확히 정의해야 한다.
이 절차가 제공하는 것
| 요소 | 보안 의미 |
|---|---|
| 공개키 기관 | 상대 공개키의 신뢰성 확인 |
| timestamp | 오래된 공개키 응답 재사용 방지 |
| nonce | 재전송 공격 탐지와 상호 인증 |
| session key | 공개키 연산 이후 실제 데이터 통신에 사용할 대칭키 |
실무 관점에서 보는 주의점
- 공개키 기관의 공개키를 어떻게 신뢰할지 먼저 정해야 한다.
- timestamp를 쓰려면 참여 시스템 간 시간 동기화가 필요하다.
- nonce는 충분히 예측 불가능해야 하고 재사용하면 안 된다.
- 세션키는 통신 단위로 새로 만들고 사용 후 폐기해야 한다.
- 암호화만으로는 권한이 증명되지 않는다. 인증 이후 권한 속성과 접근 정책이 별도로 필요하다.
개념 검증용 OpenSSL 명령
아래 명령은 SESAME 구현이 아니라, 전자서명과 공개키 검증 개념을 손으로 확인하는 최소 예시다.
mkdir -p ~/sesame-concept-lab
cd ~/sesame-concept-lab
openssl genpkey -algorithm ed25519 -out authority-private.pem
openssl pkey -in authority-private.pem -pubout -out authority-public.pem
printf 'B public key fingerprint: example-only\nTime1: 2026-06-23T00:00:00Z\n' > authority-response.txt
openssl pkeyutl -sign \
-inkey authority-private.pem \
-rawin \
-in authority-response.txt \
-out authority-response.sig
openssl pkeyutl -verify \
-pubin \
-inkey authority-public.pem \
-rawin \
-in authority-response.txt \
-sigfile authority-response.sig마무리
SESAME 흐름을 이해할 때는 식을 외우기보다 역할을 분리해서 보는 것이 좋다. 공개키 기관은 공개키의 신뢰를 제공하고, nonce는 상호 인증과 재전송 방지를 담당하며, 세션키는 실제 통신 효율을 위해 사용된다. 이 구조를 알아두면 Kerberos, PKI, TLS handshake 같은 인증 프로토콜을 이해할 때도 흐름을 잡기 쉽다.