본문 바로가기
Study/암호학

키 교환 체계 (비밀키, 공개키)

by 슬픈 야옹이 2023. 1. 25.

인터넷 상에서 두 단말이 서로 암호화 통신을 하려면 비밀키든 공개키든 서로의 키를 가지고 있어야 한다.

 

그렇다면 한 단말이 여러 단말과 각각 암호화 통신을 하려면?

그 단말은 통신하려는 단말의 수 만큼 키를 가지고 있어야 한다. 물론 상대 단말도 마찬가지다.

 

통신하려는 단말의 수가 제한적이라면 서로가 서로의 키를 모두 가지면서 통신해도 별다른 문제는 없겠지만,

인터넷 상에서 여러 단말과 암호화 통신을 한다면 이야기가 달라진다.

 

당장 이용자 수가 수백만에 이르는 은행이나 각종 플랫폼, 게임 등을 생각해봐도, 이용자 수 만큼의 키를 유지관리한다는 것이 결코 쉬운 일이 아니다.

사용자 입장에서도 그러한 키들이 공동으로 쓰이지 못하고 서비스를 이용할 때마다 키를 생성해서 사용한다면 이러한 키들을 관리하는 것은 더더욱 불가능에 가까워진다.

 

이에 암호화 통신에 사용할 키를 발급 및 관리하는 센터를 별도로 두어 관리하는 키관리 시스템이 생겨났다.

 

키관리 시스템은 비밀키 암호 시스템과 공개키 암호 시스템에서 각각 다르게 구현된다.

 

비밀키 암호 시스템에서의 키관리는 KDC를 이용한 비밀키 분배 방식이 대표적으로 쓰이고,

공개키 암호 시스템에서는 SESAME을 이용한 공개키 분배 방식이 대표적으로 쓰인다.

 

KDC를 이용한 비밀키 분배

사용자와 KDC는 서로 통신할 마스터 키(비밀키)를 사전에 등록하고, KDC 이용자는 다른 이용자와의 암호화 통신을 위해 KDC에게 세션키를 요청한다.

 

여기서 세션키는 발신자와 수신자가 KDC로부터 분배받아 암호화 통신에 사용하는 일회성 키로, 양측 간 통신이 종료되면 자동으로 폐기된다.

 

KDC를 이용한 비밀키 분배, 즉 세션키 분배 과정은 다음과 같다.

 

KDC를 이용한 비밀키 분배 과정

 

(1) A가 B와의 통신을 위해 KDC에게 A, B에 대한 신원 정보와 함께 세션키 요청을 보낸다.

 

(2) KDC는 A와 B에게 통신에 사용할 세션키와 상대방의 신원 정보, 신원 확인 정보(T)를 각자의 마스터 키로 암호화하여 전송한다. (KA, KB는 각 사용자와 KDC 간의 마스터 키)

 

(3) A가 자신의 신원 정보와 신원 확인 정보를 분배받은 세션키로 암호화하여 B에게 전송한다.

 

(4) 발신자 A를 확인한 B는 자신의 신원 정보와 신원 확인 정보를 세션키로 암호화하여 다시 A에게 전송한다.

 

(5) 서로에 대한 신원 확인이 완료되었으므로 A, B는 이후로 통신 종료 시까지 세션키를 이용하여 암호화 통신을 한다.

 

KDC를 이용한 비밀키 분배 시스템에서는 KDC에게 세션키를 요청하고 분배받는 과정에서 자신에 대한 신원 확인도 가능하므로, 로그인 등의 사용자 인증 절차를 KDC에서 진행하기도 한다.

 

이 때 통신을 요청한 A 입장에서 KDC를 인증 절차까지 동시에 진행해준다는 의미로 1차 도메인이라 하고,

로그인 이후에 실제 서비스를 제공하는 수신자(이를테면 서버) 등을 2차 도메인이라 한다.

 

 

 

SESAME을 통한 공개키 기반의 세션키 분배

지난 포스트에서 말했듯, 공개키 암호 시스템은 A의 공개키를 공개한 사람이 실제 A인지, A의 공개키가 맞는지 등의

공개키에 대한 신뢰성(유효성) 문제가 있었다.

 

이에 공개키 역시 신뢰할 수 있는 기관에 등록하여 공개하는 방식으로 공개키의 신뢰성을 확보할 수 있다.

 

공개키를 신뢰할 수 있는 기관에 등록한 뒤 기관으로부터 세션키를 분배받는 방식을 SESAME이라 하며,

자세한 분배 과정은 다음과 같다.

 

SESAME을 통한 세션키 분배 과정

 

 

(1) A가 기관에게 B의 공개키 요청

 

(2) 기관은 A에게 B의 공개키 정보를 기관의 개인키로 서명하여 전송

 

(3) A는 전달받은 B의 공개키로 자신의 신원 정보(ID(A))와 인증 정보(N1)를 암호화하여 B에게 전송

 

(4) A의 메시지를 받은 B는 기관에게 A의 공개키 요청

 

(5) 기관은 B에게 A의 공개키 정보를 자신의 개인키로 서명하여 전송

 

(6) B는 전달받은 A의 공개키로 A가 보낸 인증 정보(N1)과 자신이 만든 인증 정보(N2)를 암호화하여 A에게 전송

 

(7) B의 메시지를 받은 A는 B가 만든 인증 정보(N2)를 다시 B의 공개키로 암호화하여 전송

 

(8) 서로에 대한 신원 확인을 마쳤으므로, A는 통신에 사용할 세션키(Ks)를 생성하여 B의 공개키로 암호화하여 전송

 

(9) B에게 세션키 전달이 완료되면 해당 세션키로 암호화 통신 시작

 

 

정리하면, 비밀키와 공개키 암호 시스템 모두 암호화 통신에 사용할 키를 각자 보관하면 유지관리에 큰 부담이 되므로

별도의 키 분배 기관을 두어 키를 관리하고, 세션키를 이용하여 암호화 통신에 사용한다.

 

비밀키 암호 시스템에서는 KDC가 대표적인 키관리 시스템이고, 공개키 암호 시스템에서는 SESAME이 대표적인 키관리 시스템이다.

 

두 키관리 시스템 모두 얼핏 복잡해 보이지만 직접 그림을 그려가며 차근차근 따라가면 이해할 수 있을 것이다.

 

'Study > 암호학' 카테고리의 다른 글

인증서와 PKI  (0) 2023.01.23
공개키 암호  (0) 2023.01.16
비밀키 암호와 DES  (0) 2023.01.15
고전 암호 기법 - 전치  (0) 2023.01.11
고전 암호 기법 - 치환  (0) 2023.01.10