3장에서는 message authentication
4장에서는 user authentication
원격 사용자 인증은 사용자가 주장하는 신원을 검증하는 과정이다. 이 과정은 식별(identification)과 검증(verification) 단계로 나뉜다.
전자 사용자 인증 모델은 사용자의 신원에 대해 신뢰성을 보장하는 과정을 말한다.
대칭키 분배에는 4가지 방법이 있다:
A가 대칭키를 선택하여 B에게 직접 전달
제 3자가 대칭키를 선택하여 A와 B에게 전달
A 또는 B가 대칭키로 새로운 키를 생성하고 상대방에게 전달
A와 B가 제 3자인 C와 암호화된 연결을 맺고, C가 A와 B에게 키를 전달 (BEST)
위의 4번째 방법에서 A와 C, B와 C는 영구키를 사용해서 연결을 맺는다.
C는 A와 B에게 세션키를 분배한다.
A가 B와 통신하려면, KDC에게 연결 요청을 전송한다.
KDC는 요청을 수락한 후, 일회용 세션키를 생성하여 A와 B에게 전달한다.
A와 B는 세션키를 사용하여 암호화된 논리적 연결을 설정한다.
Kerberos는 키 분배와 사용자 인증 서비스를 제공하는 중앙집중식 인증 시스템으로, 대칭 암호를 기반으로 한다.
용어 | 설명 |
---|---|
C | 클라이언트 (Client) |
AS | 인증 서버 (Authentication Server) |
V | 서비스 서버 (Service Server) |
ID_C | 클라이언트의 식별자 |
ID_V | 서버의 식별자 |
P_C | 클라이언트의 비밀번호 (Password) |
1. C->AS
ID_C || P_C || ID_V
나의 Password는 뭐다~
2. AS->C
Ticket 전송
Ticket = Encryption K_V(ID_C || AD_C || ID_V )
3. C->V
ID_C || Ticket
Ticket과 함께 ID 전송
ID_V
: 서버가 티켓이 올바르게 복호화 되었는지 확인가능ID_C
: 티켓이 C에게 발행되었음을 명시비밀번호 평문 전송: 패스워드가 평문으로 전송되어 도청에 취약.
잦은 비밀번호 입력: 서버에 접속할 때마다 비밀번호 입력 필요.
개선된 Kerberos는 TGS (Ticket-Granting Server)를 도입하여 비밀번호 입력 빈도를 줄이고, 평문 비밀번호 전송 문제를 해결했다.
1. C -> AS
ID_C || ID_TGS
나 클라이언튼데 이런 TGS 서버에서 인증 받을래
2. AS -> C
E[K_C(Ticket_TGS)]
- Kc는 Pc(client password)로부터 생성됨
- E_Kc는 클라이언트만 열어볼 수 있음
- Kc는 클라이언트와 AS가 공유하는 비밀키이다.
- C -> TGS
ID_C || ID_V || Ticket_tgs
TGS는 실제 서버에 대한 티켓을 제공해주는 서버이다.
- TGS -> C
Tickt_V
- C -> V
ID_C || Ticket_V
1,2 과정 - 로그인 할 때 한번씩 실행
3,4 과정 - 다른 서버에 접속할 때 한번씩 실행
5 과정 - 서버에 접속할 때마다 실행
Ticket_TGS
Ticket_TGS = E[K_TGS(ID_C || AD_C || ID_tgs || TS1 || Lifetime1)]
K_TGS
는 TGS와 AS 간에 공유되는 비밀키
Ticket_TGS
는 AS가 만든 것이기 때문이다.Ticket_TGS
는 3번에서 TGS가 복호화한다.- ⚠️ 클라이언트는 Ticket을 풀어보지 못한다.
Ticket_V
Ticket_V = E[K_V(ID_C || AD_C || ID_V || TS2 || Lifetime2)]
K_V
는 TGS와 V 간에 공유되는 비밀키
- TGS가
K_V
를 사용해서 암호화를 한다.- V가
K_V
를 사용해서 복호화를 한다.
Ticket_TGS
(티켓 승인 티켓) 재사용이 가능해져, 로그인 시 한 번 발급받은 티켓을 여러 서버에 접속할 때 사용할 수 있다.문제점
첫 번째 시나리오보다 안전해짐
- 또 다른 두 가지 문제점 발생
- 티켓 유효기간 문제: Ticket을 가로챈 뒤 해당 워크스테이션에서 로그오프 할 때까지 대기 -> 타임스탬프로 대비
티켓 제시자와 티켓 발행 받은 자의 동일성 확인 필요- 서버를 사용자에게 인증하는 절차가 없음
공격자가 특정 서버로 전달되는 메시지를 다른 곳으로 송신, 위장(가짜) 서버 가능
기존 클라이언트 인증
- Authenticator_C: 티켓을 확인하기 위해 클라이언트가 생성하는 인증자, 짧은 인증 시간, 클라이언트의 신원 인증
- 상호간의 인증이 필요한 경우 TS_5 +1: C는 Kc,v로 TS_5 + 1을 복호화해서 V를 인증
핵심은 Authenticator와 비밀키들이 생성되었다는 것
비밀키: (C,TGS), (C,V)
결함 | Version 4 | Version 5 |
---|---|---|
암호화 방식 | DES를 사용한다. | 원하는 암호화 방식을 마음대로 사용할 수 있다. (명시 가능) |
인터넷 프로토콜 | IP 주소를 사용했다. | 프로토콜을 정할 수 있다. |
바이트 순서 | 빅 엔디안/리틀 엔디안을 명시해야 한다. | ASN.1, BER을 사용한다. |
유효기간 | 최대 유효기간은 1280분이다. | 티켓에 시작과 종료 시간을 명시한다. |
인증서 전달 | 클라이언트들 간에 인증서를 전달해서 사용할 수 없다. | 인증서 전달이 가능하다. |
관계 복잡도 | N개의 공동체에 대해 O(N^2)의 Kerberos 관계 맺기가 필요하다. | 관계 설정을 줄였다. |
이중 암호화 | Ticket 이중 암호화로 인한 낭비 | 1번만 암호화하도록 변경 |
PCBC 암호화 | DES 비표준 모드인 PCBC 사용 | 표준 CBC 모드 사용 |
세션키 | 세션키를 사용해서 메시지 암호화 -> 재전송 공격에 취약 | 클라이언트와 서버 간에 서브 세션키 협상 가능 |
패스워드 공격 | P_C로 K_C를 만들어냄 -> 패스워드 공격에 취약 | 사전인증 기법 이용 |
Ticket_TGS를 만들어내기 위해 K_TGS로 암호화 -> K_C로 암호화
자세히 과정을 하지는 않음
공개키 방식을 사용한 키 분배
공개키 방식을 사용해서 비밀키 분배, 대칭키 분배를 할 수 있다.
서명 안된 인증서: 사용자 ID와 공개키
Diffie-Hellman 키 교환을 이용
두 통신자 사이에 인증을 제공하지 않음(중간자 공격)
<대안>
E_K(M)
)E_puA(K)
)E_K(M)
|| E_PUA(K)
)목표: 메시지를 알아내기
그럴려면 비밀키를 알아야함
A의 개인키로 Decryption D(E_puA(K))
X.509는 ITU-T라는 표준화 기구에서 정의한 인증서 표준으로, 다양한 보안 프로토콜에서 활용된다.
X.509 인증서 |
---|
버전 |
인증서 일련번호 |
서명 알고리즘 식별자 |
발행자 이름 |
유효 기간 |
주체 이름 |
주체의 공개키 정보 |
발행자 유일 식별자 |
주체 유일 식별자 |
확장 |
서명 |
서명 방식: 인증서의 모든 구성 요소에 대해 서명이 적용된다.
CA가 서명한 공개키 인증서는 CA<<A>>
로 표기되며, 이는 CA가 A라는 주체의 공개키에 CA 자신의 개인키로 서명한 것이다.
CA{I}
: 서명된 해시코드와 I를 CA가 서명한 것.CA<<A>> == CA{인증서 구성요소}
CA가 발행한 인증서는 다음과 같은 특성을 지닌다:
A가 B의 공개키를 얻으려면, 인증서 체인을 통해 확인할 수 있다.
예를 들어, A의 CA는 X1
이며 X1<<X2>>
, X2<<B>>
와 같은 체인이 있을 때를 가정해보자.
- B의 공개키는 X2의 개인키로 서명되어 있음.
X2<<B>>
- B의 공개키를 얻으려면 X2의 공개키가 필요.
X2<<B>>
- X2의 공개키는 X1의 개인키로 서명되어 있음.
X1<<X2>>
- X2의 공개키를 얻으려면 X1의 공개키로 열어보면 됨.
A는 X2의 공개키를 통해 B의 공개키를 얻는다.
CRL(Certificate Revocation List)
: 취소되었지만 유효기간이 남은 인증서 목록을 보관한다.
인증서가 취소되는 이유는 다음과 같다:
PKI(Public-Key Infrastructure)
디지털 인증서를 생성 및 관리하는 데 필요한 정책 및 절차를 정의한 구조이다.
사용자가 많을 경우 신원 관리를 효율적으로 수행하기 위해 통합 신원 관리가 필요하다.
신원 관리
: 개인이 자원에 접근하는 절차를 중앙화 및 자동화하여 관리하는 시스템.
SSO
: 한 번 인증을 통해 네트워크의 모든 자원에 접근할 수 있도록 하는 시스템이다. 이는 신원 관리 시스템의 핵심 개념으로, 네트워크상의 모든 자원에 대해 단일 인증만으로 접근을 가능하게 한다.
한 번의 인증 후, 다른 시스템에서도 자동으로 접속할 수 있는 기능이다.
이는 다중 보안 도메인 간에 디지털 신원을 공유하는 방식이다.