본문 바로가기

Computer Science/Network

[Network] SSL 암호화 (대칭키, 공개키, 개인키)

반응형

1. SSL

SSL Secure Socket Layer 의 줄임말로 웹서버와 브라우저 사이의 보안을 위해 사용되는 프로토콜이다. SSL Certificate Authority (CA) 라고 불리는 3rd party 를 통해 서버와 클라이언트의 인증에 사용한다.

- HTTPS

SSL 적용한 대표적인 사례가 HTTPS 이다. HTTPS HTTP SSL 을 적용하여 보안을 강화한 프로토콜이다. HTTPS 는 공개키와 대칭키 방식을 혼합하여 데이터를 암호화하여 전달한다.

2. SSL 의 암호화

SSL 에서 데이터를 암호화 하기 위해서 사용하는 일종의 비밀번호를 키 (key) 라고 한다. 이 키에 따라서 암호화 된 결과가 달라지기 때문에 키를 모르면 복호화를 수행할 수 없다.

 

암호화의 방식은 이 키의 종류에 따라서 구분되는데, SSL 은 대칭키와 공개키 두가지 방식을 혼합하여 사용한다.

- 대칭키

대칭키는 동일한 키로 암호화와 복호화 모두에 사용하는 방식이다.

즉 하나의 비밀번호를 가지고 데이터를 암호화하여 전달하고, 암호화 된 데이터를 전달받은 쪽에서도 동일한 비밀번호로 데이터를 복호화 하여 사용한다.

 

이러한 방식은 동일한 키를 사용하기 때문에 간단하고 빠르지만 보안에 있어서 취약점이 있다. 바로 대칭키를 전달 중 발생할 수 있는 키 유출 문제이다. 암복호화를 위해서는 통신하는 양쪽이 모두 대칭키를 가지고 있어야 하는데, 대칭키의 무분별한 배포로 대칭키가 유출이 된다면 사실상 암호화가 무의미해진다. 또한 통신하는 대상이 많아질 수록 관리해야하는 키들도 많아지기 때문에 키 관리에 대한 문제도 발생하게 된다. 이러한 문제를 해결하기 위한 방식이 공개키 방식이다.

- 공개키

공개키 방식은 두개의 키를 가지고 암복호화를 진행하는 방식이다. 두개의 키는 공개키 (public key) 와 개인키 (private key) 이다. 공개키로 암호화한 데이터는 개인키로 복호화 되고, 개인키로 암호화한 데이터는 공개키로 복호화 된다.

 

일반적으로 공개키 방식을 통한 통신에서 서버가 개인키를 가지고 클라이언트에 공개키를 제공한다. 클라이언트가 공개키로 암호화한 데이터를 개인키를 가지고 있는 서버가 복호화하여 읽을 수 있다. 이 과정에서 공개키가 유출되더라도 공개키를 가진 쪽은 공개키에 의해 암호화된 데이터를 복호화 할 수 없기 때문에 문제가 되지 않는다.

 

공개키를 제공하는 방식으로 암호화한 데이터와 공개키를 함께 전송하는 방식이 있다. 데이터를 제공받은 사람은 데이터와 함께 온 공개키를 통해서 데이터를 복호화 하고 정보를 읽을 수 있게 됩니다. 이 과정에서 공개키가 유출될 수 있는데, 그럼에도 공개키를 사용하는 이유는 공개키의 목적이 데이터의 보안이 아니기 때문이다. 공개키 방식에서는 데이터 제공자의 신원을 보장하는 것에 중점을 둔다. 데이터를 공개키로 복호화 할 수 있다는 것은 그 공개키와 쌍을 이루는 개인키를 통해 데이터를 암호화 했다는 것을 의미한다. 즉 데이터를 제공한 쪽의 신원을 보장하는 것이다. 이러한 것을 전자 서명이라고 한다.

3. SSL 인증서

SSL 인증서는 클라이언트와 서버 간의 통신을 제3자가 보증해주는 전자 문서이다. 클라이언트가 서버에 접속한 직후에 서버가 클라이언트에게 인증서 정보를 전달한다. 클라이언트는 인증서 정보가 신뢰할 수 있는 인증서인지 검증한 후에 통신 절차를 수행한다.

 

SSL 인증서의 역할은 크게 두가지로 나눌 수 있습니다.

 

1) 클라이언트가 접속한 서버가 신뢰할 수 있는 서버임을 보장한다.
2) SSL 통신에 사용할 공개키를 클라이언트에게 제공한다.

- CA (Certificate authority)

인증서의 첫번째 역할은 서버의 신뢰성을 보장하는 것이다. 이 역할은 CA 라 불리는 기업들이 수행하는데, 신뢰성 있는 엄격한 검증을 통해 공인된 기업들로 SSL 통신을 제공하려는 서비스는 이 CA 들로부터 인증서를 구입해서 사용해야 한다.

- SSL 의 내용

SSL 인증서에는 다음과 같은 정보가 포함되어 있다.

 

1) 서비스의 정보: 인증서를 발급한 CA, 서비스의 도메인 등등
2) 공개키 정보: 공개키의 내용, 공개키의 암호화 방법

 

인증서는 클라이언트가 접속한 서버가 클라이언트가 접속하고자 했던 서버가 맞는지 확인을 위한 서비스의 내용과 서버와의 통신을 위한 공개키 정보를 가지고 있다. 이때 서비스의 도메인, 공개키 정보 등은 CA 로부터 인증서를 구입할 때 제출해야 한다.

 

브라우저는 미리 CA 의 리스트와 각 CA 공개키를 가지고 있다. SSL 인증서를 발급한 CA 가 이 CA 리스트에 있다면 인증서를 해당 CA 의 공개키를 사용하여 인증서 데이터를 복호화한다. 복호화가 성공한다면 인증서가 해당 CA 의 개인키를 통해서 암호화 된 신뢰할 수 있는 인증서라는 것을 알 수 있게 된다.

4. SSL 동작 방법

SSL 은 암호화 된 데이터를 전송하기 위해서 공개키 방식과 대칭키 방식으로 혼합해서 사용한다.

클라이언트와 서버가 주고받는 데이터는 대칭키 방식을 통해서 통신하고, 해당 데이터를 복호화 하기위한 대칭키를 전달할 때는 공개키 방식으로 전달한다.

 

SSL 은 클라이언트와 서버 간의 연결 및 대칭키 공유를 위한 handshake 과정과 대칭키를 통한 실제 데이터 통신을 하는 Session 과정으로 나뉜다.

- handshake

이 과정은 두 노드간에 통신을 위한 확인을 하고 주고받을 데이터의 암복호화를 위한 대칭키를 생성하는 과정이다.

 

1) 클라이언트가 서버에 접속한다.
  - 이때 클라이언트는 랜덤 데이터와 자신이 지원하는 암호화 방식, 세션 ID 등을 서버에 전달한다.

2) 서버는 클라이언트의 요청에 대해 응답한다.
  - 이때 서버가 선택한 클라이언트의 암호화 방식과 SSL 인증서, 그리고 랜덤 데이터를 전송한다.

3) 클라이언트는 인증서를 확인하고 세션키를 전달한다.
  - 클라이언트는 CA 리스트를 통해서 전달받은 SSL 인증서를 검증하고 데이터를 복호화 한다.
  - 서버로 부터 전달받은 랜덤 데이터와 클라이언트가 생성한 랜덤 데이터를 가지고 키를 생성한다.
  - 이 키는 대칭키 방식으로 서버와의 데이터 통신에 사용할 키이다.
  - 이 키를 서버에 전달하기 위하여 공개키 방식을 사용하는데, 해당 키를 제공받은 공개키로 암호화하여 서버에 전달한다.

4) 서버는 가지고 있는 개인키로 전달받은 키를 복호화하여 저장한다. 이렇게 하여 양쪽에 동일한 키가 저장되게 된다.

5) 양쪽 모두 가지고 있는 키를 변환하여 master secret 값을 만드는데, 이 값을 통해서 session key 를 생성한다. 이렇게 생성된 session key 가 대칭키 역할을 하여서 클라이언트와 서버의 데이터 암복호화에 사용된다.

- session

세션은 서버와 클라이언트가 데이터를 주고받는 단계이다. 이 단계에서 양쪽은 데이터를 암복호화 하기 위하여 handshake 과정에서 생성한 대칭키를 사용한다. 대칭키를 사용하여 암호화한 데이터를 전송하고, 수신받은 데이터를 대칭키로 복호화하여 정보를 읽는다.

 

굳이 바로 공개키 방식으로 통신하는 것이 아닌, 공개키 방식으로 세션키를 공유하고, 이 키를 대칭키로 데이터를 주고받는 이유는 컴퓨터 파워 관련 문제 때문이다. 공개키 방식은 컴퓨터 파워를 많이 사용하는 방식으로 느리지만 데이터를 보다 안전하게 주고 받을 수 있다. 이 방식으로 데이터를 주고받는 경우 속도와 자원 등의 문제가 있을 수 있기 때문에 대칭키만 이 방식으로 주고받고, 실제 데이터는 보다 빠른 대칭키 방식으로 수행하도록 한다.

 

세션이 종료된 후에는 양 쪽 모두 대칭키인 세션키를 제거한다.

[Reference]

- https://12bme.tistory.com/80

 

[정보보안] SSL(Secure Socket Layer) 이란

현재 근무 중인 업체에서 SSL 인증서 적용 작업이 필요하다고 합니다. SSL 인증서관련 필요한 것이 무엇인지에 대한 요청이 있었습니다. 간단하게 SSL에 대해 정리해보겠습니다. 1. SSL 개념 잡기 SSL

12bme.tistory.com

- https://liveyourit.tistory.com/18

 

[보안이슈] 네이처리퍼블릭 해킹! 유출된 회원 개인정보

네이처리퍼블릭 해킹 개요 네이처리퍼블릭 홈페이지가 해킹을 당해 회원 개인정보가 유출되었다. (약 14만건이라는 기사를 봤는데 아직 정확히 밝혀진 것은 없는 것 같아 작성하지 않았다) 명절

liveyourit.tistory.com

 

반응형