공개키는 키 분배 관련 이슈가 존재한다.
해당 방법들을 알아보자.
1. 외부에 그냥 오픈하는 것
2. 공개디렉터리에해당하는 공개키에 올리겠다
3. 권위있는 사이트나 기관을 통해 분배
4. 공개키 인증서를 사용
차례대로 알아보자.
첫 번째 방법은 누가 봐도 간단해 보인다.
이것은 쉽게 위조당할 위험이 있다. 공개키의 announcement에서 누군가가 다른 공개키를 전송하는 등의 공격이 예가 될 수 있다.
두 번째 방법은 사이트라던지 파일 시스템 폴더 같은 곳에 (name, public-key)와 같은 형태로 올린다.
물론 이것도 쉽게 위조될 위험이 있다.
세 번째는 있는 기관이다.
1. A가 기관에 B의 공개키를 요구한다 ( Time stamp가 찍혀 있음)
2. 기관은 기관의 개인키로 암호화해서 A에게 준다.
3. A는 공개키로 복호화해서 B의 공개키를 얻고 자신의 ID값과 Nonce값을 B에게 보낸다.
4. B는 이걸 받고 자기도 A의 공개키를 받기 위해 기관에게 요청한다.
5. B는 이 받은 공개키로 A에게 받은 Nonce값과 자신의 Nonce값을 같이 보낸다.
6. A는 이때 내가b로부터대답이온 것이다. 그에 대한 대답으로 Nonce2를 보냄
상당히 안전해 보이지 않는가?
단점은 congestion이 발생할 수 있다는 것이다 = bottleneck
그래서 공개키를 제때 못 받을 수도 있다.
그래서 나온 것이 현재 사용하는 인증서이다.
인증서는 실시간 접속을 통해 받는 것이 아니다.
인증서에는 기본적으로 id와 public key가 binding 되어 있다.
인증기관의 private key를 가지고 public key와 id가 binding이 되어 있는 것이다.
이것을 기반으로 어떻게 분배하는가?
1. A가 기관에게 미리 공개키를 제공하면 인증기관은 A의 공개키와 A의 id를 binding 한다. 이때 기관의 개인키가 쓰임
2. B도 그런 식으로 해서 받는다.
3. A는 B에게 자신의 인증서를 주게 되고 B는 기관의 공개키를 통해서 이를 푼 다음 A의 공개키를 얻게 된다.
이제 다른 관점에서 보자.
이전 공개키 설명에서 공개키는 대칭키에 비해 성능이 떨어진다고 했다. 즉 암/복호화에 대한 효율이 좋지 않다.
따라서 암/복호화에 쓰일 secret key를 공개키를 이용해서 분배하는 것이다.
A가 B에게 자신의 공개키를 줬다고 하자
B가 A에게 받은 공개키로 비밀키를 암호화해서 보낸다.
이것은 A밖에 풀 수가 없고 이것을 a는 풀어서 암/복호화를 진행해 통신하게 된다.
하지만 중간자 공격에 대한 취약점이 있다.
이를 막기 위해선 상호 인증을 해야 한다.
기밀성과 인증을 보장하며 비밀키를 분배하겠다
1. A는 B에게 자신의 Id와 N1값을 B의 공개키로 암호화해서 보낸다.
2. B는 N1와 Id를 얻는다. -인증
3. B는 N1과 N2를 A의 공개키로 암호화해서 보냄 - 보낸 녀석이 b인걸알게 됨
4. A는 B에게 N2를 B의 공개키로 암호화해서 보냄 - n2가 제대로 갔으니까 a가 받았구나 알 수있음
5. 그리고세션 키를자신의 비밀키로 암호화하고 그걸 다시 b의 공개키로 암호화해서 보냄 = b만 풀 수 있음
핵심은 인증서를 통한 공개키 분배와 보낸 이를 인증하기 위한 nonce값이다.
'Infomation_Security' 카테고리의 다른 글
전자서명 기법 정리 (0) | 2021.08.20 |
---|---|
메세지 인증(MAC)과 해시 함수 (0) | 2021.08.20 |
공개키 암호와 RSA (0) | 2021.08.19 |
AES (0) | 2021.08.07 |
Block Cipher mode (0) | 2021.07.17 |