SSL, TLS 그리고 대칭키, 공개키에 대해서 알아보자.
모두 HTTPS를 위한 기술들이다.
HTTPS에 대해 알려면, HTTP 그리고 SSL과 TLS에 대해 알아야한다.
- HTTP와 HTTPS의 경우 따로 주제를 파야할 정도로 이야기가 많으니 HTTP는 인터넷을 통해 정보를 주고 받기 위한 프로토콜이며 암호화가 되어있지않다.
SSL 또는 TLS 프로토콜의 위에서 이것에 보안을 추가한것이 HTTPS, 그리고 TLS는 HTTPS를 만들기 위한 기술이라고 보면된다.
SSL 과 TLS ?
-
요약 : 서버와 클라이언트가 안전하게 정보를 주고 받기 위해 암호화를 하는 프로토콜이다.
-
SSL Secure Sockets Layer :
정보를 안전하게 전송하기 위한 프로토콜
클라이언트와 서버간 전송되는 데이터를 암호화하여 정보의 안전성을 보장한다.
-
TLS Transport Layer Sercurity:
SSL3.0의 후속 프로토콜, 하위호환이 된다.
더 나은 알고리즘(RC4 → AES)으로 데이터의 기밀성과 무결성을 보장한다.
포워드 시크리시 : 특정 세션에서만 사용하는 임시키로 암호화를 하기 때문에 암호키가 누출되어도 이전의 통신 내용을 해돌할 수 없다.
SSL 3.0 이후에 TLS로 넘어갔으며 SSL은 폐지되었지만, TLS를 아직도 SSL이라고 부르기도 한다고한다.
보안이 되지 않은 HTTP 연결에 TLS를 적용한 것이 HTTPS이다.
핸드 셰이크
네트워크 상에서 통신을 시작하기 전에 두 시스템 사이에 안전한 연결을 설정하기 위한 프로세스. 클라이언트-서버가 서로를 인증하고 통신에 사용할 암호화 방법을 협상하는 것이다.
SSL의 핸드 셰이크는 명시적이고, TLS의 핸드 셰이크는 암시적이다.
- 명시적 핸드셰이크 : 통신의 각 주체가 통신 시작전에 명확한 동의나 교환을 통해 서로의 존재를 확인하고, 통신 가능상태를 설정하는 것.
클라이언트-서버 간에 통신을 암호화하기 전에 클라이언트의 요청으로 핸드셰이크 프로세스를 명확하게 정의 하는 것
- 암시적 핸드셰이크 : 서로 다른 기기나 애플리케이션이 서로를 감지하고 통신을 시작하는 것.
클라이언트-서버간 연결이 설정되는 동안 자동으로 핸드셰이크 프로세스가 발생한다.
대략적인 핸드셰이크 과정
- Client Hello : 클라이언트가 서버에게 자신의 칩퍼 스위트(chiper suite), SSL/TLS 프로토콜 버전, 랜덤 바이트, 세션 아이디 등을 전달하는 패킷이다.
- Chiper suite : 암호화, 인증, 압축 알고리즘의 조합
키 조합 알고리즘 | 인증 알고리즘 | 대량 암호화 알고리즘 | MAC, 메시지 인증 코드 로 구성되어있다.
- Server Hello : 클라이언트 헬로 패킷의 chiper suite중 매칭 되는것을 골라 되돌려준다.
만약 매칭되는 버전의 SSL/TLS가 없다면 연결을 거부한다.
- Certificate : 서버가 자신의 SSL/TLS 인증서를 클라이언트에게 전달한다. 인증서에는 서버의 공개키가 들어있다.
클라이언트는 CA의 공개키로 인증서로 복호화한다. 즉, 인증서를 검증한다.
또는 Server Key Exchange : 인증서의 내부에 공개키를 주지않고 서버가 직접 전달하는 경우이다.
- Client Key Exchange : 클라이언트가 대칭키를 생성한 후 서버의 공개키를 이용해 암호화후 서버에 전달한다.
- RSA : 대칭키를 보낸다.
- DH, DHE, ECDHE : 대칭키의 시드를 보낸다.
- Change Cipher Spec Protocol : 클라이언트-서버가 서로에게 패킷 정보를 모두 교환했고, 통신할 준비가 끝났음을 알리는 패킷이다. Finshded 패킷을 보내서 핸드셰이크를 끝낸다.
암호화
MAC을 사용한다는 공통점이 있다.
- SSL : MD5 알고리즘
- TLS : HMAC
인증기관 Certifcate Authority
- 디지털 인증서를 발급하고 관리하는 신뢰할 수 있는 기관
- 인증서 발급/관리
- 신원 확인 : 개인/기관/웹사이트
- 공개키 인프라(Public Key Infrastructure)의 일환으로 디지털 인증서를 사용하여 안전한 통신을 가능하게 한다.
대칭 키
Symmetric-key Security Method
- 암호화와 복호화에 같은 키를 사용하는 것이다.
- 사용 알고리즘 : DES, 3DES, AES, SEED, ARIA
원래는 대칭키라는 것을 이용해서 암호화를 하였다.
하지만 서버에서 브라우저에 대칭키를 알려줄때 중간에 감청을 한다면 보안에 문제가 생기게 되고, 이것을 해결하기 위한 방법이 비대칭 키이다.
비대칭 키
Asymmetric-key Security Method
키 소유자만 알고 있는 개인키, 그리고 모든 사람에게 알려져있는 공개키가 있다.
- 데이터 기밀성 보호 : 공개키로 암호화 후 개인키로 복호화
- 누구나 암호화 할 수 있으나, 복호화는 키 소유자만 가능하다.
- 디질털 서명, 무결성 : 개인키로 암호화 후 공개키로 복호화
- 누구나 복고화 할 수 있으나, 암호화가 가능한 것이 키 소유자 뿐이므로 정상적인 데이터가 왔음을 알 수 있다.
- 부인 방지 : 송/수신자가 메시지를 주고 받은 사실을 부인하지 못하게방지하는 것이다.
- 사용 알고리즘 : RSA, DSA, ECDSA, ElGamal
이것은 리소스를 많이 소모하기 때문에 두 가지를 혼합한다.
혼합방식
- 클라이언트와 서버가 비대칭키를 가지고 있다.
- 클라이언트에서 대칭키를 생성한 후 서버의 공개키로 암호화하여 전송한다.
- 서버에서 개인키로 복호화한다.
- 중간에 탈취되지 않은 것이 확실한 안전한 대칭키로 서로 통신을 주고받는다.
참조한 페이지
SSL vs. TLS - 차이점은 무엇인가?
SSL과 TLS의 차이점은 무엇인가요?
TLS vs SSL: What’s the Difference? Which One Should You Use?
핸드셰이크
TLS 핸드셰이크의 원리는 무엇일까요? | SSL 핸드셰이크
HTTPS 통신과정 쉽게 이해하기 #3(SSL Handshake, 협상)
대칭키, 비대칭키
[암호학] 대칭키 vs 공개키(비대칭키) 암호화 차이
Network - 대칭키, 공개키(비대칭키)란 무엇인가?!(+ SSL, HTTPS)
대칭키와 비대칭키/공개키