Key Authentication Protocol
키 인증 프로토콜
- Key를 사용한 사용자 인증 메커니즘을 의미한다.
- 대표적인 키 인증 메커니즘은 아래와 같다.
- Two-Factor Authentication (이중 인증)
- Authentication using Shared Keys (대칭키를 이용한 인증)
- Authentication using Public Key Cryptography (공개키를 이용한 인증)
Two-Factor Authentication (2FA; 2 요소 인증)
- 두 개의 인증수단을 조합 적용하여 안전성을 향상시켜 인증하는 방식을 의미한다.
- 인증에 사용되는 수단은 아래와 같이 크게 4가지로 구분된다.
- Something You Know (당신이 알고있는것) (Password, Passphrase, Secret Code 등)
- Something You Have (당신이 가진 것) (Smartcard 등)
- Something You Are (당신 그 자체인 것) (지문, 홍채, 안면 등)
- Something You Does (당신이 하는 것) (음성, 필적 등)
- 사용자 인증에 대한 자세한 정보는 아래 포스트를 참고하자.
* User Authentication (사용자 인증) (URL)
Example. Password Generator(Have)와 PIN(Know)을 결합한 Log on to Corporate Computer Systems
- 사용자가 가진 패스워드 생성기(OTP)와
사용자가 알고 있는 PIN(Personal Identification Number)을 결합하여
서버에 인증(로그인)하는 메커니즘이다.
Server (서버) |
\(Nonce\) ▶ |
User (사용자) |
Password Generator (OTP Generator) (패스워드 생성기) |
|
\(Nonce, PIN\) ▶ |
||||
◀ \(E_{K} (Nonce, PIN)\) |
||||
◀ \(E_{K} (Nonce, PIN)\) |
- 위 프로토콜은 Relaying에 기반하여 Nonce를 악용한 MITM (Man in the Middle Attack; 중간자 공격)에 취약하다.
* MITM (MIG-in-the-Middle-Attack) (Based on Relaying)
- Team B의 SAAF 전투기가 \(N\)(Nonce)를 수신했을 때,
\(\{N\}_{K}\)를 응답하게 프로토콜이 설계되어 있다는 점을 이용하여
Team A의 MIG 전투기가 적 영공에 안전하게 침입할 수 있다.
Authentication using Shared Keys (대칭키를 이용한 인증)
- 대칭키를 통한 여러가지 버전의 인증 메커니즘들을 보며 취약점을 분석해본다.
- 대칭키는 드러나서는 안되며, Replay가 불가능해야 하고, 인증이 원활히 이루어질 수 있어야 한다.
- 메커니즘을 표현할 때 사용하는 약칭에 대한 의미는 아래 표와 같다.
Legend | Description |
\(K\) | - A와 B만이 갖고 있는 Symmetric Key |
\(R\) | - Nonce (Random Number) |
\(E(x)\) | - Encryption for \(x\) |
[Version 1]
Alice (A) |
"I'm Alice" ▶ |
Bob (B) |
◀ \(R\) |
||
\(E(R, K)\) ▶ |
- Mutual Authentication(상호 인증)이 결여되었다.
(A는 인증되었지만, B는 인증되지 않았다.)
[Version 2]
Alice (A) |
"I'm Alice", \(R\) ▶ |
Bob (B) |
◀ \(E(R, K)\) |
||
\(E(R, K)\) ▶ |
- A가 B로부터 수신한 내용(\(E(R, K)\))을 그대로 B에게 다시 전송하고 있기 때문에
Replay Attack에 취약하다.
[Version 3]
Alice (A) |
"I'm Alice", \(R_A\) ▶ |
Bob (B) |
◀ \(R_B, E(R_A, K)\) |
||
\(E(R_B, K)\) ▶ |
- A와 B사이에 위치한 T에 의한 Reflection Attack(반사 공격)에 취약하다.
* Reflection Attack (반사 공격)
- Sender(B)가 생성한 메시지를 가로챈 Attacker(T)가 해당 메시지를 다시 Sender(B)에게 재전송하여
접근 권한을 탈취하는 형태의 공격 방법이다.
- T는 A로 위장하여 B에게 Nonce(\(R_1\)) 을 전송하며 B와의 Session을 Open 한다.
- B는 T로부터 받은 \(R_1\) 를 암호화한 값과 다음 Nonce(\(R_2\)) 를 전송한다.
- T는 이중 계정을 이용하여 B에게 다시 접근하여 Step 2에서 받은 \(R_2\) 를 전송하며 Session을 Open 한다.
- B는 Protocol에 따라 \(R_2\) 를 암호화한 값(\(E_K(R_2)\))과 다음 Nonce(\(R_3\)) 를 전송한다.
- T는 Step 4에서 받은 \(R_2\) 가 암호화된 값(\(E_K(R_2)\))을 B에게 전송하여 B에게 A인 것처럼 위장 인증에 성공한다.
- 즉, B로부터의 Question에 대한 Answer를 B에게서 받아내어 T가 A인것처럼 위장하여 인증하는 공격 방법이다.
[Version 4]
Alice (A) |
"I'm Alice", \(R_A\) ▶ |
Bob (B) |
◀ \(R_B, E_{K}(ID_B, R_A)\) |
||
\(E_K(ID_A, R_B)\) ▶ |
- A와 B가 ID 정보를 함께 전송함으로써 이중 계정을 사용한 Reflection Attack을 방지할 수 있다.
Authentication using Public Key Cryptography (공개키를 이용한 인증)
- 공개키 메커니즘을 이용한 여러 가지 버전의 인증 메커니즘들을 보며 취약점을 분석해본다.
- 다루는 인증 방식들은 아래와 같다.
- 단순 암호화 (Without Mutual Authentication)
- 단순 서명 (Without Mutual Authentication)
- 암호화 with 세션 키 (Without Mutual Authentication)
- 서명 with 세션 키 (Insecure)
- 선서명 후암호화 with 세션키
- 선암호화 후서명 with 세션키
- 선서명 후암호화 with 타임스탬프
- 선암호화 후서명 with 타임스탬프 (Insecure)
- 메커니즘을 표현할 때 사용하는 약칭에 대한 의미는 아래 표와 같다.
Legend | Description |
\(\{x\}_a\) | - \(a\)의 공개키로 \(x\)를 암호화 |
\([x]_a\) | - \(x\)에 \(a\)가 서명 - \(a\)의 비밀키로 \(x\)를 암호화 |
\(R\) | - Nonce (Random Number) |
\(K\) | - Session Key |
\(T\) | - Timestamp |
* Session Key (세션 키)
- 통신 당사자끼리의 하나의 Communication Session에서만 사용되는 Key이다.
- A와 B가 서로 간의 Authentication을 마치고, Session Key를 분배받아 Communication 하게 된다.
- 하나의 키를 사용한 암호문이 많이 오갈 경우, 이를 분석하여 키를 알아내는 공격에 대비하기 위한 메커니즘이다.
- Confidentiality(기밀성)와 Integrity(무결성)가 보장된다.
* Timestamp (타임스탬프)
- 통신 당사자들이 동시간에 통신하고 있다는 Freshness를 보장할 수 있게 하는 수단이다.
- 인증 시 많은 메시지를 주고받아야 하는 Nonce Mechanism과 달리,
Timestamp Mechanism은 주고 받는 메시지의 수가 상대적으로 적다.
* Perfect Forward Secrecy (PFS; 완전 순방향 비밀성)
- 시간이 지나도 공격자가 암호체계를 뚫을 수 없는 성질을 의미한다.
- 비밀 키가 노출되더라도 그 후의 키 분배 과정에서 얻는 세션 키에 대한 기밀성에는 영향을 미치지 않는 성질이다.
- 일반적으로, Ephemeral Diffie-Hellman Key Exchange Algorithm (URL)을 통해 새로운 세션 키를 분배한다.
[Version 1: 단순 암호화]
Alice (A) |
"I'm Alice" ▶ |
Bob (B) |
◀ \(\{R\}_A\) |
||
\(R\) ▶ |
- Mutual Authentication(상호 인증)이 결여되었다.
(A는 인증되었지만, B는 인증되지 않았다.)
[Version 2: 단순 서명]
Alice (A) |
"I'm Alice" ▶ |
Bob (B) |
◀ \(R\) |
||
\([R]_A\) ▶ |
- Mutual Authentication(상호 인증)이 결여되었다.
(A는 인증되었지만, B는 인증되지 않았다.)
- 이전 Version들로 미루어 보았을 때,
Encryption과 Signature에 동일한 Key를 사용하는 것에는 많은 문제가 동반됨을 알 수 있다.
[Version 3: 암호화 with 세션키]
Alice (A) |
"I'm Alice", \(R\) ▶ |
Bob (B) |
◀ \(\{R, K\}_A\) |
||
\(\{R+1, K\}_B\) ▶ |
- Mutual Authentication(상호 인증)이 결여되었다.
(A는 인증되었지만, B는 인증되지 않았다.)
[Version 4: 서명 with 세션키]
Alice (A) |
"I'm Alice", \(R\) ▶ |
Bob (B) |
◀ \([R, K]_B\) |
||
\([R+1, K]_A\) ▶ |
- Mutual Authentication(상호 인증)은 이행되었으나
세션 키의 비밀이 보장되지 않았다. (세션 키가 노출될 수 있다.)
[Version 5: 선서명 후암호화 with 세션키]
Alice (A) |
"I'm Alice", \(R\) ▶ |
Bob (B) |
◀ \(\{[R, K]_B\}_A\) |
||
\(\{[R+1, K]_A\}_B\) ▶ |
- Mutual Authentication이 이행되었고 세션키의 비밀도 보장이 되었다.
[Version 6: 선암호화 후서명 with 세션키]
Alice (A) |
"I'm Alice", \(R\) ▶ |
Bob (B) |
◀ \([\{R, K\}_A]_B\) |
||
\([\{R+1, K\}_B]_A\) ▶ |
- Mutual Authentication이 이행되었고 세션키의 비밀도 보장되었다.
[Version 7: 선서명 후암호화 with 타임스탬프]
Alice (A) |
"I'm Alice", \(\{[T, K]_A\}_B\) ▶ |
Bob (B) |
◀ \(\{[T+1, K]_B\}_A\) |
- Mutual Authentication이 이행되었고 세션 키의 비밀도 보장이 되었다.
[Version 8: 선암호화 후서명 with 타임스탬프]
Alice (A) |
"I'm Alice", \([\{T, K\}_B]_A\) ▶ |
Bob (B) |
◀ \([\{T+1, K\}_A]_B\) |
- Mutual Authentication은 이행되었지만, 세션 키가 중간자에 의해 탈취되는 MITM Attack에 취약하다.
- B는 A에게 \(K\)를 전송할 필요가 없다.
(즉, \([\{T+1\}_A]_B\) 만 전송함으로써 중간자 공격을 방지할 수 있다.)
* MITM Attack (Man-in-the-Middle Attack; 중간자 공격)
- 중간자가 A가 전송한 \(\{T, K\}_B\)를 탈취하여 B에게 그대로 전송함으로써
B로부터 \([\{T+1, K\}_T]_B\)를 받아
결과적으로 세션 키 K를 탈취할 수 있는 취약점이 있다.
(단, Timestamp로 인해 중간자는 Clock Skew 이내에 연산을 빠르게 처리해야 한다.)
Chosen Protocol Attack (선택 프로토콜 공격)
- 사용자가 음란 사이트에 사진을 요청하면
음란 사이트에서는 사용자에게 서명을 요구하고
사용자는 X를 서명하여 음란 사이트에 전송한다.
- 음란 사이트는 사용자의 서명을 이용해 은행에서 재화를 구입한다.
- 일대일 프로토콜은 시중에 Deploy 되었을 때 생각지 못한 문제가 생길 수 있음을 유념해야 한다.
Key Distribution Protocol (키 분배 프로토콜)
- 키를 분배하고, 키를 관리하는 시스템을 구성하는 프로토콜을 의미한다.
- 본 포스트에서는 아래와 같은 대표적인 키 분배 프로토콜을 다룬다.
- Simple Key Distribution Protocol using Trusted 3rd Party Server
(신뢰할 수 있는 제3자를 이용한 키 분배 프로토콜의 기본형) - Needham-Schroeder Protocol (니드햄-슈뢰더 프로토콜)
- Kerberos Protocol (커버로스 프로토콜)
- 메커니즘을 표현할 때 사용하는 약칭에 대한 의미는 아래 표와 같다.
Legend | Description |
\(E_{ij}(x)\) | - \(i\)와 \(j\)가 가진 키로 \(x\)를 암호화 |
\(T\) | - Timestamp |
\(M\) | - Message |
\(N\) | - Nonce |
Simple Key Distribution Protocol using Trusted 3rd Party Server
(신뢰할 수 있는 제3자를 이용한 키 분배 프로토콜의 기본형)
Alice (A) |
\(ID_A, ID_B\) ▶ (Open Session) |
Server (S) |
||
◀ \(E_{AS}(A, B, K_{AB}, T)\) ◀ \(E_{BS}(A, B, K_{AB}, T)\) |
||||
\(E_{BS}(A, B, K_{AB}, T)\) ▶ \(E_{AB}(M)\) ▶ |
Bob (B) |
Needham-Schroeder Protocol (니드햄-슈뢰더 프로토콜) (URL)
Alice (A) |
\(ID_A, ID_B, N_A\) ▶ (Open Session) |
Server (S) |
||
◀ \(E_{AS}(N_A, ID_B, K_{AB}, E_{BS}(K_{AB}, ID_A))\) |
||||
\(E_{BS}(K_{AB}, ID_A)\) ▶ |
Bob (B) |
|||
◀ \(E_{AB}(N_B)\) |
||||
\(E_{AB}(N_B - 1)\) ▶ |
- Nonce를 사용한 탓에 복잡성이 높다.
Kerberos Protocol (커버로스 프로토콜) (URL)
- Needham-Schroeder Protocol 기반의 키 분배 프로토콜이자 인증 프로토콜로,
Timestamp 개념을 적용해 효율성을 높이고 보안성을 더 높였다.
- 3개의 머리가 달린 Kerberos로 명명된 이유는 3개의 서버를 두고 운용되는 프로토콜이기 때문이다.
Legend | Description |
\(L\) | - 세션 키의 존속시간 (Lifetime) |
\(T_i\) | - Timestamp included by \(i\) |
Alice (A) |
\(ID_A, ID_B\) ▶ (Open Session) |
Ticket Granting Server (S) |
||
◀ \(E_{AS}(T_S, L, K_{AB}, B, E_{BS}(T_S, L, K_{AB}, A))\) |
||||
\(E_{BS}(T_S, L, K_{AB}, A), E_{AB}(A, T_A)\) ▶ |
Bob (B) |
|||
◀ \(E_{AB}(T_A + 1)\) |
Reference: Information Security: Principles and Practice 2nd Edition
(Mark Stamp 저, Pearson, 2011)
Reference: Computer Security: Principles and Practice 3rd Edition
(William Stallings, Lawrie Brown, Pearson, 2014)
Reference: Multi-factor authentication, Wikiepedia, 2022.04.10 작성, URL, 2022.04.19 검색
Reference: Needham-Schroeder protocol, Wikipedia, 2022.01.21 작성, URL, 2022.04.20 검색
Reference: Kerberos (protocol), Wikipedia, 2022.04.18 작성, URL, 2022.04.20 검색
Reference: 2022학년도 1학기 홍익대학교 네트워크 보안 강의, 이윤규 교수님