사용자 인증은 기본적인 접근 제어와 계정 관리의 기본 보안 구성 요소이다.
시스템 엔티티가 신원을 확인하는 과정으로, 식별과 검증 두 단계로 이뤄진다.
사용자 인증 수단으로는 네 가지가 있다.
1. knows: 비밀번호, 핀 등
2. possesses: 키, 토큰, 스마트카드 등
3. is(신체특성): 지문 망막 등
4. 동적 생체 인식: 음성 동작 등
이 방법들은 개별적으로도 사용될 수 있고 병행해서 사용될 수도 있다.
모든 방법은 사용자 인증을 제공할 수 있지만 모두 문제점을 가지고 있다.
Authentication Protocols
상호간의 신원을 서로 확신시키고 세션키를 교환하기 위해 사용된다.
단방향 또는 상호적일 수 있다.
주요 이슈는 세션키를 보호하기 위한 기밀성, 재생 공격을 방지하기 위한 적시성이 있다.
재생공격이란, 유효한 서명된 메시지를 복사해놓고 나중에 재전송하는 공격이다.
대응 방안으로는 시퀀스 번호를 사용하는 방법(일반적으로 불가능하다), 타임스탬프 사용하는 방법(동기화된 시간이 필요하다), 유니크한 nonce를 사용하는 challenge/response 방법이 있다.
One-way Authentication
발신자와 수신자가 동시에 통신하지 않는 경우에 필요하다. (이메일 등)
헤더는 평문으로 남겨져야 하므로 이메일 시스템에서 전달될 수 있다.
본문 내용을 보호하고 발신자를 인증하려는 경우가 있을 수 있다.
대칭 암호화를 사용하여 이를 구현할 수 있다.
두 레벨의 계층키(마스터키-세션키)를 사용한다. 일반적으로 KDC와 함께 사용된다.
각 당사자는 자체 마스터키를 KDC와 공유하고, KDC는 당사자간 연결에 사용되는 세션키를 생성한다.
마스터키는 이러한 세션키를 당사자에게 배포하는 데에 사용된다.
A -> S : IDa, IDb, N1
S -> A : E(Ka, [Kab, IDa, IDb, Lifetime, N1+1, Ticket]) Ticket = E(Kb, [Kab, IDa, IDb, Lifetime])
A -> B : Ticket, E(Kab, [IDa, IDb, N2])
B -> A : E(Kab, [N2+1])
Kerberos
커버로스는 MIT에서 개발된 신뢰할 수 있는 키 서버 시스템으로, 분산 네트워크에서 중앙집중식의 개인 키 기반 제 3자 인증을 제공한다.
사용자가 네트워크를 통해 분산된 서비스에 액세스할 수 있도록 하며 모든 워크스테이션을 신뢰할 필요 없이 중앙 인증 서버만 신뢰하면 된다.
Needham-Schroeder(니덤 슈로더) 기반 인증 프로토콜로 구현된다.
기본적으로 두 가지 서버를 가지고 있다.
1. 인증 서버 - AS
사용자는 먼저 AS와 통신하여 자신을 식별하고, AS는 변경되지 않는 인증 자격 증명인 TGT(Ticket-Granting Ticket)을 제공한다.
2. 티켓 그랜팅 서버 - TGS
사용자는 이후에 다른 서비스에 대한 액세스를 TGS에 요청한다.
이 요청은 사용자의 TGT를 기반으로 한다.
DES를 사용하다가 2005년 version.5 부터는 AES를 사용하고 있다.
C와 V가 통신한다고 하자.
C는 먼저 AS에게 자신의 식별자 ID(c)와 TGS의 식별자 ID(tgs)와 요청일 TS1을 보낸다.
AS는 C에게 C와 TGS의 통신을 위한 키인 K(c,tgs)와 ID(tgs), TS2, Lifetime2, Ticket(tgs)를 Kc로 암호화해서 보낸다.
여기서 티켓은 K(c,tgs), ID(c), AD(c), ID(tgs), TS2, Lifetime2를 K(tgs')로 암호화한다. AD는 처음 티켓을 요청한 Workstation이 아닌 다른 곳에서 티켓을 사용하는 것을 방지하는 용도로, IP 등이 포함된다.
이제 C는 TGS에 ID(v), Ticket(tgs), Authenticator(c)를 보낸다. 여기서 Authenticator(c)는 C에 대한 식별자, AD, TS3을 K(c,tgs)로 암호화한 것이다.
TGS는 K(c,v), ID(v), TS4, Ticket(v)를 K(c,tgs)로 암호화해서 보내준다.
여기서 Ticket(v)는 K(c,v), ID(c), AD(c), ID(v), TS4, Lifetime4를 K(v)로 암호화해서 보내준다. Ticket(tgs)에서의 그것과는 다르다!
이제 C는 V에게 티켓과 Authenticator(c)를 보낸다. A(c)는 ID(c), AD(c), TS5를 K(c,v)로 암호화했다.
V는 C에게 TS5에 1을 더한 값을 K(c,v)로 암호화해서 보냄에 따라 통신을 할 수 있게 되었다.
Key Exchange vs Key Agerement
키교환은 누군가 만들어서 다른 참여자에게 전달하는 방식이다. (Kerberos 등)
서버가 키를 만들어서 참여자에게 전달하는데, 신뢰하기 어려울 수도 있다.
키동의는 모든 참여자가 키 생성에 기여하는 방식이다. (Diffi-Hellman)
위 두 방법은 혼용되며 사용되고 있다.
DHE-RSA
Ephemeral Diffie-Hellman with RSA로, 일시적으로 키를 사용한다. (반어로, Static Diffie-Hellman이 있다)
C->S : 통신 초기화(Client Hello) 메시지를 보낸다.
S->C : g, p, g^x, nonces, RSASign, Certificate(s)를 보낸다.
C->S : g^y를 보낸다.
S는 g^xy mod p 연산으로 임시 마스터 키를 만든다.
임시 마스터 키를 PRF(의사난수생성기)에 넣어서 마스터 키를 만든다.
PRF(마스터키, nonce)가 세션키가 된다.
이는 전방향 안정성을 가진다. 세션키가 장기적인 비밀키에 의존하지 않기에 비밀키가 유출되어도 과거 통신이 유출되지 않는다.
Commitment Scheme
값을 미리 결정하지만 나중에 공표할 때까지 비밀로하는 암호 기술이다. 값을 중간에 바꿀 수 없다.
과정은 challenge - commit - verify 로 이뤄진다.
해시함수를 사용한 방법과 대칭암호를 사용한 방법이 있다.
해시함수 사용
B->A : N1
A->B : H(Value, N1, N2)
A->B: Value, N2
대칭암호 사용
B->A : N
A->B : E(K, [Value || N])
A->B : Value, K
Zero-Knowledge Proof
영지적 증명이란, 어떤 비밀을 알고 있는 사람이 다른 사람에게 그 비밀을 드러내지 않고 자신이 알고 있음을 증명하는 것이다.
challenge - response로 이뤄지고, 여러번 반복적으로 수행하며 증명한다.
예를 들어, 앨리스가 y, 매우 큰 소수 p, p의 원시근 g가 주어졌을 때 y = g^x mod p에서 x를 알고 있다는 것을 영지적으로 증명한다고 가정해보자.
B -> A : c (0 < c < p-1)
A:
0보다 크고 p-1보다 작은 임의의 정수 k를 정하고, d = g^k mod p, r = k - cx mod p-1을 연산한다.
A -> B : d, r
B:
d = g^r * y^c mod p를 연산하고 c가 올바르다면 증명된다.
'학교강의필기장 > 암호학' 카테고리의 다른 글
15. 각종 암호학 알고리즘 정리 (1) | 2023.12.12 |
---|---|
13. Key Management and Distribution (0) | 2023.12.08 |
12. Digital Signatures (1) | 2023.12.08 |
11. Message Authentication (2) | 2023.12.07 |
10. Hash Functions (2) | 2023.12.06 |