본문 바로가기
  • 오늘처럼
소프트웨어 아키텍처/Linux

TLS 인증서 (1) - 대칭키와 공개키 암호화 방식

by bluefriday 2022. 6. 3.
반응형

인증서(Certificate)란 두 당사자 간의 거래에 있어서 그 신뢰성을 보장하는데 사용되며, TLS 인증서는 유저와 서버 혹은 서버와 서버 간의 통신에 있어서 그 통신이 암호화 되었음을 확인시켜준다. 이번에는 TLS 인증서에 대해 알아보면서 먼저 그 시작이 되는 대칭키와 공개키 암호화 방식에 대해 정리해본다.


 

시나리오 #1 : 다음의 그림을 통해 좀 더 자세히 알아보자. 여기서는 사용자가 은행이나 병원 등의 어떤 웹페이지에 접속하려고 할 경우를 예로 들어본다. 사용자에게 특화된 서비스를 이용하기 위하여 사용자는 해당 서버에 대하여 자격증명(로그인 등)을 수행해야 한다. 

시나리오 #1 : 평문 데이터의 위험성

이 때 자격증명을 위한 ID, PW 등의 정보를 웹 서버에 보내게 되는데, 이를 평문(Plain text)으로 보낼 경우, 해커 등의 악의적인 공격자(이하 공격자)는 이 네트워크 트래픽을 중간에 탈취(sniffing)하여 쉽게 개인 정보등을 취득 가능하다.


시나리오 #2 : 그럼 개인 정보를 안전하게 전달하기 위하여 어떻게 해야할까? 먼저 ID, PW 등의 자격증명 정보를 암호화 하는 방법을 생각해 볼 수 있다. 사용자는 임의의 숫자나 문자로 구성된 '암호화 키(Key)' 를 사용하여 자격증명 정보를 암호화 하여 전송한다.

시나리오 #2 : 암호화 키를 이용한 데이터 전송

이렇게 될 경우 공격자가 중간에 네트워크 트래픽을 탈취하여도 암호화에 사용된 키가 없으면 복호화를 할 수 없으므로 아무것도 할 수가 없다. 하지만 이 경우에는 웹 서버 측에서도 키가 없으므로 당연히 데이터를 확인할 수가 없다.


시나리오 #3 :  웹 서버 측에서 암호화 된 데이터를 복호화 할 수 있도록, 사용자가 키를 복사하여 전달할 수 있다.

시나리오 #3 : 공격자의 키 탈취로 인한 데이터 노출

그러나 이 경우 같은 네트워크를 통하여 전달되기 때문에 공격자 또한 키를 탈취할 수 있으므로 처음과 상황은 동일해진다.

위 시나리오 #2 에서 사용된것 처럼 하나의 키로 데이터를 암호화하고 또 복화하는 방식을 대칭키 암호화 방식이라고 한다. 데이터를 주고 받는 쪽에서 키를 서로 교환해야 한다는 단점이 있고, 키가 탈취될 가능성도 있지만, 일단 안전하게 키가 양쪽에 전달될 경우 빠른 속도로 암호화 통신이 가능하다는 장점도 있다. 대칭키 암호화 방식을 사용하는 주요 알고리즘으로는 AES, DES, 3DES 등이 있다. 

대칭키 암호화 방식의 경우 위 시나리오 #3 과 같이 키를 전송하는 문제가 있는데, 여기서는 이 문제를 해결하기 위한 방법으로 공개키(비대칭키) 암호화 방식에 대해 알아보자.


이번에는 하나의 키로 데이터를 암호화 하고 복호화 하는 대신, 'Private key' 와 'Public key(혹은 Public lock)' 라고 하는 2개의 키 쌍(a pair of keys) 을 사용해보자.

  • Public key (Public lock) :
    • 모든 사람들이 접근 가능한 key
    • 이 키로는 데이터를 암호화(잠금)만 가능
  • Private key :
    • 오직 사용자만이 가지고 있으며 타인에게 노출되지 않는 key 
    • 이 키와 쌍인 Public key로 암호화한 데이터는, 오직 이 Private key 로만 복호화 가능

어떤 Public key 로 암호화한 데이터는, 그 키와 쌍을 이루는 Private key 로만 복호화가 가능하다. 이제 이 2개의 key를 가지고 위에서 다뤘던 시나리오를 다시 확인해보자.

시나리오 #4 : Public Key 공개

시나리오 #4 : 데이터를 받는 서버 쪽에서 private, public key 쌍을 생성하고 그 중 public key 를 공개한다. 이 key는 사용자 뿐 아니라 공격자 또한 취득이 가능하다.


시나리오 #5 : Public key로 암호화한 키 전달

시나리오 #5 : 그러나 공격자는 Private Key 가 없으므로, Public key(Lock) 로 암호화 된 키를 확인할 수가 없다. 반면 서버 측에서는 Private key 를 이용하여 복호화하여 키를 확인할 수 있다.


시나리오 #6 : 대칭키를 이용한 암호화 통신

시나리오 #6 : 이제 키 전송 문제가 해결되었다. 키는 악의적인 공격자를 제외한, 사용자와 서버 측만이 가지고 있으므로 속도가 빠른 대칭키 통신을 통해 데이터를 안전하게 전달할 수 있다. 이 과정에서 공격자가 트래픽을 중간에 탈취하더라도 암호화한 키가 없으므로 복호화를 할 수가 없다. 


위 시나리오를 통해서 대칭키와 비대칭키(공개키) 암호화 방식을 통한 데이터 전송을 확인하였다.

두가지 방식을 비교하면 다음과 같다.

  대칭키 암호화 방식 공개키(비대칭키) 암호화 방식
특징 암호화/복호화에 사용되는 키가 동일 암호화, 복호화 키가 쌍으로 존재
장점 빠른 성능 키 관리 필요 X
단점 키 교환 / 키 관리가 필요 대칭키 방식에 비해 느린 성능
대표 알고리즘 DES, AES, SEED, ARIA RSA, DSA

 

다음에는 위 내용에 대하여 실제 코드로 키를 생성하는 부분을 추가로 알아본다.

댓글