이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

보안

PKI 리서치 - 비대칭키(공개키) 알고리즘을 이용한 전자서명

이쿠우우 2022. 4. 2. 11:13
반응형

 

PKI 리서치

 

목표

SSH, Kubernetes 등을 리서치 하면서 항상 개념이 혼란스러웠던 주제가 바로 인증서였음.
그러다 보니 ca.crt, ca.key, server.crt 같은 인증서 관련 파일만 보면 시작하기도 전에 걱정이 먼저였음...
대칭키, 공개키 알고리즘 개념은 완벽히 알고있지만 인증서, 전자서명 개념만 들어가면 개념이 흔들렸음.
이를 해결하기 위해 날을 잡고 개념부터 심화까지 글과 그림을 그려가며 리서치를 진행함.
개념적인 부분 부터 하나하나 다시 복습하는 마음으로 필자가 궁금증이 생겼던 시점의 순서대로 정리해봄.

 


PKI 리서치 시리즈 이동

PKI 리서치 - 암호화 알고리즘 개념
PKI 리서치 - 비대칭키(공개키) 알고리즘을 이용한 전자서명
PKI 리서치 - 공개키를 공개하는 방법 : PKI
PKI 리서치 - 실생활에서의 PKI : HTTPS - SSL/TLS
PKI 리서치 - OpenSSL을 통해 직접 PKI 환경을 구축해보자


 
 

비대칭키(공개키) 알고리즘을 이용한 전자서명

전자서명이란 당사자가 보냈다는 것을 확인하는 절차에 사용되는 인증서임.
 

비대칭키 서명 알고리즘 1

비대칭키 방식은 암호화 말고도 서명(인증)에도 사용됨.
즉 비대칭키는 암호화를 Private Key 로 하느냐 Public Key 로 하느냐에 따라서
암호화에 사용할 수 있고 서명에도 사용할 수 있음.
비대칭 키를 서명에 사용하는 경우 아래와 같은 과정으로 사용 됨.
 

동작 과정

1. A사용자가 Private Key, Public Key를 생성.
2. A사용자가 생성했던 Public Key를 B에게 전달. 
    (사실상 B이외에도 모두가 A가 생성한 Public Key를 받을 수 있음)
3. B사용자는 A사용자의 Public Key를 보관하고 있음.
4. A는 보관하고 있는 Private Key를 이용해서 공개키 알고리즘을 통해 평문을 암호화 함.
    (Private Key로 암호화 했기 때문에 암호문이 아니라 전자서명임.)
5. 전자서명을 B에게 전송
6. B는 받은 전자서명을 기존에 보관하고 있던 A사용자의 Public Key
   동일한 공개키 알고리즘을 통해 복호화해서 평문을 확인함.
 
평문을 A의 개인키로 암호화한다면 암호문이 노출될 경우
누구나 A의 공개키를 가지고 있으니 해당 암호문을 복호화 가능함.
즉 해당 암호문이 A의 공개키로 정상적으로 복호화된다면 
암호문이 A가 암호화 했다는 것이 보장되는 것과 같은 의미임으로
이러한 과정으로 비대칭 암호화 방식을 전자서명에 사용하기도 함.

 

 

 

비대칭키 서명 알고리즘 2

위의 서명과정에 Hash를 추가로 사용해서 
평문이 위조 또는 변조 되지 않음을 증명하는 서명방법이 있음.
 

동작 과정

1. A사용자가 Private Key, Public Key를 생성.
2. A사용자가 생성했던 Public Key를 B에게 전달. 
    (사실상 B이외에도 모두가 A가 생성한 Public Key를 받을 수 있음)
3. B사용자는 A사용자의 Public Key를 보관하고 있음.
4. A는 평문을 Hash 함수를 돌려 Hash 값을 생성함. 
5. A는 보관하고 있는 Private Key를 이용해서 공개키 알고리즘을 통해 Hash값을 암호화 함.
    (Private Key로 암호화 했기 때문에 암호문이 아니라 전자서명임.)
6. 생성된 전자서명과 평문을 B에게 전송.
7. B는 받은 전자서명을 기존에 보관하고 있던 A사용자의 Public Key로 
    동일한 공개키 알고리즘을 통해 복호화함. 복호화된 결과는 Hash값임.
8. A에게 받은 평문을 Hash함수를 돌려서 Hash값을 생성함.
9. 복호화 한 Hash값과 평문을 Hash한 값을 비교함
   두개의 값이 일치한다면 서명도 정상이고 평문도 위/변조 되지 않음이 증명됨.
   일치하지 않는다면 평문에 위/변조가 발생함이 증명됨.
 
이와 같은 서명 방법으로
당사자가 보냈다는 것을 확인할 수 있고
내용이 위조, 변조 되지 않았음을 증명할 수 있음.

 

 
 

비대칭키 서명 알고리즘 3 (SSH 공개키 인증 방식)

 
위에서 전자 서명에 개념에 대해 알아봤다면
전자 서명이 사용되는 Case를 한번 알아보도록 함.
전자서명이 사용되는 대표적인 Tool은 SSH가 있음.
SSH에서 사용되는 전자서명 과정은 위에서 설명한 1,2 와는 또 다른 과정으로 진행됨.
 

SSH란?

SSH Client 와 Server 간의 통신을 암호화 해주는 것입니다.
즉 Telnet 과는 다르게 데이터를 암호화 해서 주고받게 해주는 것입니다.
 
전자서명 방식은 SSH에서 아래와 같은 방법으로 사용되기도 함.
 
[참고]
SSH 암호화 통신 Channel 생성 과정은 
아래 설명하는 동작원리 이외에도 다양한 방법이 제공되지만
공개키 기반으로 연결이 수립되는 과정을 예시로 설명함.
 
 

SSH 암호화 channel 생성 동작 과정

SSH Server : 접속 대상(remote 서버)
SSH Client  : Server에 접속하려고 하는 host

1. SSH Client에서 Private Key, Public key를 생성
2. SSH Client에서 접속 하고자 하는 SSH Server에  생성했던 Public key를 전송함.
3. SSH Client에서 SSH Server로 SSH 접속시도
4. SSH Server는 256Bits 랜덤값 생성
5. SSH Server는 생성한 랜덤값으로 Hash값을 만들어서 저장하고 있음.
6. SSH Server는 생성한 랜덤값을 받았던 Public key로 암호화 함.
7. 암호화 된 data를 SSH Client로 전달함.
8. SSH Client는 암호화 된 data를 받아서 자신의 Private key로 복호화 함.
9. SSH Client는 복호화 한 data로 Hash값 생성.
10. Hash값을 SSH Server로 전달.
11. SSH Server는 이전에 만들어서 저장하고 있던 Hash값 비교.
12. SSH Server의 Hash값과 SSH Client가 전달해준 Hash 값이 일치하면 
     Channel이 형성되어 원격제어/데이터 전송 가능.

 

 


 

실생활에서 사용되는 암복호화 과정

 
상위의 과정을 작성하며 개념을 정리하니 이제 대칭키와 비대칭키(공개키) 알고리즘은 완벽히 이해함.
그래서 우리 삶에서는 해당 알고리즘이 어떻게 적용되어있는지 알아봄.
여기서 각 알고리즘의 장,단점으로 인해 조금 복잡한 과정으로 암복호화가 이루어진다는 것을 확인함.
 
[대칭키 알고리즘의 단점]
Key 전달의 어려움 : Key가 유출되면 누구나 해당 key로 암호문을 복호화 할 수 있음
 
[비대칭키 알고리즘의 단점]
대칭키 알고리즘에 비해 속도가 많이 느림
 
위와같은 각 알고리즘의 단점을 해결하기 위해 
실제 암복호화 과정은 아래와 같이 이루어짐.
 
 

암복호화 동작 과정

 

1. B사용자가 Private Key, Public Key를 생성.
2. A사용자와 B사용자가 서로 암호문을 주고받기 위해 사전에 B가 생성한 Public Key를 A에게 전달 
3. A사용자가 B사용자가 전달한 Public Key를 보관하고 있음.
4. A사용자가 암복호화에 사용할 임시 Key(대칭키)를 생성
5. A는 임시 Key(대칭키) 이용해서 대칭키 알고리즘을 통해 평문을 암호화 함.
6. A는 보관하고 있는 B의 Public Key를 이용해서 공개키 알고리즘을 통해 임시 Key(대칭키)을 암호화 함.
7. "평문을 암호화 한 암호문"과  "암호화 된 임시 Key(대칭키)"를 B에게 전송
8. B는 받은 "암호화 된 임시 Key(대칭키)"을 기존에 보관하고 있던 Private Key로 
    동일한 공개키 알고리즘을 통해 복호화해서 임시 Key(대칭키)를 확보함.
9. 최종적으로 임시 Key(대칭키)를 사용해서 암호문을 복호화 해서 평문을 확인함.
 
 
위와같은 과정으로 대칭키를 공개키 알고리즘으로 안전하게 전달하고
평문은 대칭키 알고리즘을 통해 매우 빠른 속도로 암복호화 할 수 있음.

 

 


제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!


 

참고
학부생 때 기록했던 자료 및 내 머리...

 

반응형