본문 바로가기
CS/컴퓨터 보안

대칭키 공개키 관리, 디피-헬먼 키 교환 프로토콜, 공개키 기반 구조 PKI

by Renechoi 2024. 5. 6.

0. 문제

대칭키 암호에서 비밀키는 송수신자가 서로 나누어 가지기 어렵다는 문제가 있다. 그래서 공개키 암호를 이용해 비밀키를 암호화해서 분배할 수도 있지만, 공개키 암호 역시 공개키를 분배할 때 실제로는 다양한 위협요소가 존재한다.

1. 대칭키 암호의 키 관리

앨리스(Alice)와 밥(Bob)이 있다고 가정하자. 대칭키를 사용하는 암호 시스템에서 앨리스가 밥에게 메시지를 보내고 싶다면, 앨리스는 밥과 비밀키를 공유해야 한다.

 

두 사람이 직접 만난다면 제3자 모르게 비밀키를 정할 수 있을 것이다. 하지만 그렇지 않다면? 비밀키를 어떻게 공유할 것인가가 문제가 된다.

 

우리는 공개키 암호로 비밀키를 암호화하면 안전한 키 공윺가 가능하다는 것을 이미 알고 있다. 하지만 공개키 암호를 안전하게 사용하는 것도 간단하지만은 않다.

 

이 문제를 해결하는 방법으로 먼저 디피-헬먼키 교환 방식을 살펴보자.

디피-헬먼 키 교환

디피 헬먼 키 교환(DHKE: Diffie-Hellman Key Exchange)는 이산대수 문제에 기반하여 비밀키를 안전하게 공유하는 방법이다.

 

먼저 앨리스와 밥은 큰 소수 $p$와 양의 정수 $g$를 준비한다. 다음의 성질을 만족하도록 선택한다.

  • $^x \equiv 1 \pmod{p}$를 만족하는 가장 작은 $x$가 $p-1$인 $g$
  • $p$와 $g$는 제3자가 알아도 무방

다음과 같은 프로세스로 진행된다.

 

  • 단계 1: 앨리스와 밥은 공개 소수 $p$와 기저 $g$ (모듈로 $p$에 대한 원시 루트)에 동의한다.
  • 단계 2: 앨리스는 개인 키 $a$를 선택하고 자신의 공개 키를 $A = g^s \mod p$로 계산하여 밥에게 보낸다. 이때 s는 제3자도 모르고 밥도 몰라야 한다.
  • 단계 3: 마찬가지로 밥은 자신의 개인 키 $b$를 선택하고 자신의 공개 키를 $B = g^t \mod p$로 계산하여 앨리스에게 보낸다. 역시 t는 제3자도 모르고 앨리스도 몰라야 한다.
  • 단계 4: 앨리스는 $B$를 받고 자신만 알고 있는 s를 이용하여 $ k= B^s \mod p$로 계산한다. 이는 $g^{ab} \mod p$와 같다.
  • 단계 5: 밥은 $A$를 받고 자신만 알고 있는 t를 이용하여 $ k = A^t \mod p$로 계산한다. 이 역시 $g^{ab} \mod p$와 같다.

 

결과적으로 두 사람은 비밀키 k를 공유하게 된다.

 

마지막 단계에서 $k = B^s \mod p$ 가 $A^t \mod p$가 되는 이유는 무엇일까?

 

$B^s = (g^t)^s = g^{ts}$이고 $A^t = (g^s)^t = g^{st}$이기 때문이다. 또한 제3자는 $p, g, A, B$는 볼 수 있지만 이산 대수 문제에 의해 $s$나 $t$를 구하는 것은 어렵게 되어있어 계산할 수 없다.

 

이산대수 문제란 지수 연산은 쉽지만 로그 연산은 어렵다는 문제다. 다음 글에서 보다 자세한 설명을 볼 수 있다.

 

https://upcurvewave.tistory.com/667

 

공개키 암호: 개념, 소인수분해 문제, 이산대수 문제, 타원곡선 문제, RSA, ElGamal 알고리즘

1. 공개기 암호의 개념공개키 암호는 암호화와 복호화에 두 개의 서로 다른 공개키와 개인키를 사용하는 암호 방식이다.C = Ek(P)P = Dk(C) 이때 E는 암호화 함수, D는 복호화 함수를 의미한다. 공개키

upcurvewave.tistory.com

 

 

원칙적으로 $k$에 대한 보안성은 강하다. 하지만 특정 조건에서는 중간자 공격에 취약할 수 있다.

 

디피-헬만 키 교환 과정에서는 $p, g, A, B$가 공개되어 있어 이 값들을 가로채는 중간자가 존재할 경우, 공개 키 교환 단계에서 송신자와 수신자 사이에 자신을 끼워 넣어 각각의 통신을 가로채고 조작할 수 있다. 이러한 상황을 중간자 공격이라 한다. 이로 인해 앨리스와 밥이 실제로 공유하고 있다고 생각하는 비밀 키 $k$를 중간자도 알아내어 동일한 키를 생성할 수 있는 문제가 발생한다.

중간자 공격

  • Man In The Middle attack

중간자 공격은 암호화된 통신 과정에서 제3자가 송신자와 수신자 사이에 끼어들어 두 당사자가 서로 직접 통신하고 있다고 믿게 하면서 실제로는 모든 통신을 제어하고 조작하는 공격 방식이다. 이 공격자는 두 당사자 사이의 메시지를 가로채고, 필요에 따라 이를 변경하여 각 당사자에게 전달함으로써 자신을 합법적인 통신 상대로 위장한다.

예시

앨리스와 밥의 경우를 예로 들어 중간자 공격을 살펴보자. 이 공격에서 중간자는 앨리스와 밥이 서로에게 공개 키를 보낼 때 자신의 공개 키로 각각의 공개 키를 치환한다. 즉, 중간자는 자신의 개인 키와 공개 키 쌍인 $A'$와 $B'$를 각각 만들어 앨리스와 밥에게 보낸다.

  • 중간자의 행동:
    • 중간자는 먼저 앨리스가 생성한 공개 키 $A$를 가로채고, 자신의 공개 키 $A'$를 밥에게 앨리스의 것처럼 전송한다.
    • 동시에 밥이 생성한 공개 키 $B$를 가로채고, 자신의 공개 키 $B'$를 앨리스에게 밥의 것처럼 전송한다.
  • 앨리스와 밥의 계산:
    • 앨리스는 자신이 받은 $B'$를 사용해 공유 비밀 키를 $B'^s \mod p$로 계산하고, 이 키를 사용해 통신 내용을 암호화한다.
    • 밥은 자신이 받은 $A'$를 사용해 공유 비밀 키를 $A'^t \mod p$로 계산하고, 이 키를 사용해 통신 내용을 암호화한다.

 

중간자는 앨리스와 밥 모두와 별개의 비밀 키를 공유하게 되어, 두 사람 사이의 모든 메시지를 해독하고 필요에 따라 조작할 수 있다.

 

 

결과적으로 앨리스와 밥은 DHKE에 의해 서로 비밀키를 공유하였다고 생각하지만, 사실은 앨리스와 공격자가 하나의 비밀키를 공유하고 밥과 공격자가 다른 비밀키를 공유한다. 즉, 앨리스와 공격자가 DHKE를 진행, 밥과 공격자가 DHKE를 진행한 결과이다.

 

중간자 공격을 해결하기 위해서는 상대에 대한 인증이 필요하다.

 

2. 공개키 암호의 키 관리

공개키도 사용되려면 대칭키 암호의 비밀키처럼 분배되어야 한다. 모두에게 공개되어 분배가 쉬울 것 같지만 몇 가지 어려움이 있을 수 있다. 분배 방식을 살펴보자.

공개 선언

공개선언은 가장 단순한 방법이다. 즉 밥이 자신의 공개키를 자신의 홈페이지에 올려 두거나, 공개키를 요청하는 사람에게 직접 보내준다.

 

하지만 누군가가 밥의 홈페이지를 공격하여 밥의 공개키를 공격자의 공개키로 바꿔둔다면 어떨까? 또한 직접 전달하는 과정에서 전달 도중에 공격자가 자신의 공개키로 바꿔치기한다면 어떨까?

 

이와 같은 문제점 때문에 공개키 방식이라도 분배의 문제가 대두된 것이다.

 

신뢰받는 센터

신뢰받는 센터는 모든 사람의 공개키를 센터가 관리하는 방법이다. 신뢰받는 센터의 디렉터리에 사람들이 공개키를 올려 두면, 다른 사람의 공개키가 필요한 사람들이 신뢰받는 센터에 요청하여 해당 사람의 공개키를 얻는다.

일단 신뢰받는 센터에 올라온 공개키라면, 센터는 디렉터리를 안전하게 관리할 것이다. 이때 공격자가 다른 사람의 공개키로 바꾸지 못하도록 공개키를 등록하려는 사람은 본인의 신분을 증명ㅅ하고서 자신의 공개키를 디렉터리에 올릴 수 있어야 한다.

 

하지만 이것만으로도 문제는 해결되지 않는다. 그림에서와 같이 앨리스가 밥의 공개키를 요청하는 상황을 생각해보자. 센터가 앨리스에게 밥의 공개키를 전달하는 도중에 공격자가 자신의 공개키로 바꿔치기한다면? 여전히 공개 선언에서와 동일한 문제점이 남아 있다.

 

통제된 신뢰받는 센터

좀 더 고도화된 방식을 사용한다. 통제된 신뢰받는 센터에서는 공개키를 분배할 때 센터의 서명을 붙이는 것이다. 공개키 요청을 받을 때 타임스탬프를 같이 받고, 공개키를 분배할 때 요청받은 공개키와 요청내용, 그리고 타임스탬프에 대한 센터의 서명을 보낸다. 그러면 공개키를 분배받은 사람은 센터의 공개키로 센터의 서명을 검증함으로써 믿게 된다.

 

하지만 이 방식도 완전하지 않으며 여러 문제점이 존재한다. 첫째, 신뢰받는 센터 자체의 보안이 매우 중요하다. 이 센터가 해킹당하거나 내부에서 정보 유출이 발생한다면, 모든 공개키의 신뢰성이 훼손될 수 있다. 실제로 공개키 인프라(PKI) 내에서 신뢰받는 루트 인증 기관이 해킹당하는 사례가 있었으며, 이로 인해 수많은 서명된 인증서들이 무효화되어야 했다.

 

둘째, 중앙 집중식 통제는 단일 실패 지점(single point of failure)을 만든다. 센터의 기술적 문제나 운영상의 오류가 발생하면 모든 사용자에게 영향을 미칠 수 있다. 이는 서비스 중단과 같은 심각한 결과를 초래할 수 있다.

 

셋째, 개인정보 보호와 관련된 문제도 있다. 신뢰받는 센터가 개인의 공개키뿐만 아니라 개인 식별 정보를 처리하게 되면, 이 정보가 적절히 보호되지 않는 경우 개인의 사생활 침해가 발생할 수 있다. 또한, 센터가 사용자의 신원을 확인하기 위해 수집하는 정보가 과도할 수 있다는 우려도 있다.

 

넷째, 규모의 경제와 관련하여, 신뢰받는 센터의 유지 및 운영 비용이 매우 높을 수 있다. 이는 공개키 인증서의 비용을 증가시킬 뿐만 아니라, 최종 사용자에게도 비용 부담을 전가할 수 있다.

 

요약하자면 공개키에 대한 변조 가능성과 많은 요청에 대한 센터의 부하 문제라고 볼 수 있다.

인증기관

이로써 등장하는 것이 인증기관(CA: Certification Authority)이다. 인증기관은 공개키 인증서를 만들어 분배하는 방법이다.

 

인증기관은 사람들의 공개키를 인증서로 변환하여 디렉터리에 올려두는데, 인증서(certificate)란 바로 개인의 공개키에 인증기관의 서명을 붙인 것이다.

 

 

앨리스가 밥의 인증서를 요청하면 인증기관이 밥의 인증서를 분배하기만 하면 된다. 앨리스는 인증기관의 공개키로 밥의 인증서에 든 인증기관의 서명을 검증함으로써 믿고 사용할 수 있게 된다.

위에서 제기한 문제들을 어떻게 해결하는지 살펴보자.

문제 해결

  1. 공개키의 변조 방지: 인증기관은 각 개인의 공개키에 대해 디지털 서명을 함으로써 인증서를 발행한다. 이 서명은 인증기관의 개인 키로 생성되며, 공개키를 인증서 형태로 안전하게 배포한다. 사용자는 인증기관의 공개키로 서명을 검증하여 공개키의 진위를 확인할 수 있다. 이 과정을 통해 공개키가 변조되었는지 여부를 감지할 수 있으므로, 공개키의 신뢰성을 보장한다.
  2. 단일 실패 지점 해소: 인증기관은 다중화 및 재해 복구 계획을 포함하여 보다 견고한 인프라를 구축한다. 이러한 접근 방식은 서비스 중단을 최소화하고, 단일 실패 지점의 위험을 줄인다.
  3. 개인정보 보호: 인증기관은 엄격한 개인정보 보호 정책을 준수하며, 사용자의 개인 식별 정보와 공개키 정보가 적절하게 보호되도록 한다. 또한, 인증서에는 필요한 정보만 포함되어 있어 개인정보 노출을 최소화한다.
  4. 경제성과 확장성: 인증기관은 대규모로 운영되기 때문에 규모의 경제를 실현할 수 있다. 이는 사용자에게 보다 경제적인 인증서 비용을 제공할 수 있으며, 인증서의 발급 및 관리를 효율적으로 수행할 수 있다.

3. 공개키 기반 구조 (PKI)

공개키 기반 구조(PKI: Public Key Infrastructure)는 X.509에 기초해서 인증서를 생성하고 분배, 인증 및 폐기까지 관리하는 체계이다. 즉, 공개키 암호화를 통해 암호화 및 전자서명을 제공하는 복합적인 보안 시스템이라고 볼 수 있다.

 

은행의 결제 시스템부터 기관 간의 문서 교환, 병원 기록 등 다양하게 사용된다.

X.509

X.509는 통일된 인증서 구조를 정의하고 있다. 기본적으로 인증서는 각 공개키에 인증기관의 서명을 붙인 것이지만, 공통된 규격이 없으면 인증기관별로 인증서의 구조가 다를 수 있고, 결국 인증서 사용자들은 인증서를 사용할 때마다 그에 맞는 프로그램을 사용해야 해서 불편할 것이다.

 

-> 표준 인증서 형식

 

 

PKI의 구성요소

  • 사용자: 다양한 응용에서 전자서명을 생성 및 검증, 암-복호화 수행
  • 인증기관: 공개키에 대한 인증서를 발급
  • 등록기관: 사용자들의 인증서 신청시 신분과 소속을 확인
  • 디렉터리: 인증서, 사용자 관련 정보, 상호인증서 쌍, 인증서 취소 목록 등을 저장 및 검색하는 장소

PKI의 동작 원리

공개키와 개인키는 인증기관에 의해 같은 알고리즘을 사용하여 동시에 만들어진다. 개인키는 요청자에게만 주어지며, 공개키는 모든 사람이 접근할 수 있는 디렉터리에 인증서의 일부로 공개된다.

 

만약 사용자 A가 사용자 B에게 어떤 메시지를 보낸다면, 우선 수신자의 공개키(인증서)를 디렉터리에서 찾은 다음, 그 공개키를 사용하여 메시지를 암호화하여 보낸다. 그 메시지를 수신한 사용자 B는 그것을 자신의 개인키를 이용하여 해독한다.

  • 정보통신정책연구원(KISDI)

PKI의 관리 대상

  • 인증서: 인증서 관리는 PKI의 핵심이다. 인증서를 발행, 취소, 공표, 보관한다.
  • 상호인증서 쌍: 한 도메인이나 서로 다른 도메인의 인증기관 사이에 발행하는 인증서의 쌍 -> 상호 인증서를 사용하여 인증경로 단축 가능
    • 순방향: 인증기관 X에 대해 다른 인증기관에서 생성
    • 역방향: 인증기관 X가 다른 인증기관에 생성
  • 인증서 취소목록(CRL: Certificate Revocation List): 효력이 상실된 목록, 유효기간 만기 전에 인증서 효력이 상실되는 경우(개인키 노출, 소유자가 다른 도메인으로 옮김)

PKI의 신뢰 구성

PKI에서 신뢰는 인증경로를 통해 전달된다.

 

전자서명을 검증할 때를 생각해보자. 전자서명의 검증자는 자신이 신뢰하는 인증기관의 공개키만 알고 있으므로, 그 인증기관의 공개키를 이용하여 인증경로를 검증함으로써 서명자의 공개키를 획득한다. 이렇게 획득한 공개키는 무결성이 보장된다. 검증자는 무결성이 보장된 공개키를 이용하여 서명을 검증할 수 있다.

 

1) 계층적 구성

인증기관이 하위 인증기관에 인증서를 발행하는 루트(root) CA 아래에 계층적으로 배열되어 있는 구성으로, 인증기관은 자신의 아래 인증기관에 인증서를 발행한다.

  • 상위 CA가 하위 CA에 인증서 발행
  • 루트 CA의 공개키는 모든 사람에게 알려짐

다음 계층 구성에서 A가 B의 전자서명을 검증하는 상황을 생각해보자.

 

 

A는 B의 공개키를 획득해야 한다.

 

A는 인증기관1(루트)과 인증기관3을 신뢰하고, B는 인증기관1(루트), 인증기관 2, 인증기관 5를 신뢰한다. B는 A에게 전자서명과 함께 인증기관1에서 인증기관 5까지의 경로를 전송한다. A는 B가 자신과 같은 도메인에 있음을 확인한 후, 자신이 알고 있는 인증기관1의 공개키를 이용해 인증기관 1에서 인증기관 5까지의 인증경로를 검증하여 B의 공개키를 획득한 후 전자서명을 검증한다.

2) 네트워크 구성

인증기관이 각각의 도메인을 형성하여 독립적으로 존재하는 구성이다.

  • 인증기관들이 서로를 상호 인증하여 서로에게 인증서 발행
  • 사용자는 자신의 인증서를 발행한 CA의 공개키만 알고 있음

 

 

A가 B의 전자 서명을 검증한다고 해보자.

 

A는 인증기관3을 신뢰하고 B는 인증기관 4를 신뢰한다. A에서 B로의 인증경로는 여러개 존재하므로, 그중에서 가장 짧은 인증경로를 찾는 탐색 과정이 필요하다. 가장 짧은 경로는 '3 -> 5 -> 4' 이다. A는 이 인증경로를 이용해 B의 공개키를 획득한 후 전자서명을 검증한다.




참고자료: 컴퓨터보안(김진욱,유대현,김희천 공저 | 한국방송통신대학교출판문화원 | 2023)

반응형