알아볼 내용
- 암호와 인증서
- HTTPS, SSL, TLS
암호와 인증서
대칭 키 암호화 방식과 공개 키 암호화 방식
- 먼저 암호화, 복호화 원리 이해해야 함
- 암호화 : 원문 데이터를 알아볼 수 없는 형태로 변경
- 복호화 : 암호화된 데이터를 원문 데이터로 되돌리는 과정
대칭 키 암호화 (symmetric key cryptography) : 암호화 복호화에 동일한 키 사용
- 적은 부하로 암호화 및 복호화 빠름
- 키가 유출되면 문제이기 때문에 상대방에게 안전하게 키를 전달해야하지만 그것이 어려움
공개 키 암호화 (public key cryptography) : 비대칭 키 암호화라고도 하며 암호화 복호화를 위한 키가 각각 다름
- 암호화할 때 공개 키 사용, 복호화할 때 개인 키 사용
- 공개 키로 개인 키 유추 X. 그 반대도 마찬가지
- 공개 키는 공개되어도 무방, 개인 키만 유출안되면 됨
- 방식 : A가 B에게 전송
- A가 B의 공개 키 요청
- B의 공개 키로 암호화하고 B에 전송
- B는 개인 키로 복호
- 암호화 및 복호화에 시간과 부하가 상대적으로 많이 발생
함께 사용하는 경우가 많음 : 대칭 키를 공개 키 암호화 방식 적용해서 전달
- 대칭 키를 안전하게 전달하기 위해 공개 키로 대칭 키 암호화하고 개인 키로 암호화된 대칭 키 복호화
- 이런 방식으로 사용되는 대칭 키를 세션 키 (session key)라고 함
인증서1와 디지털 서명
- 공개 키 인증서 : 공개 키 정보를 담고 있고 공개 키의 유효성을 입증하기 위한 전자 문서
- 서버로부터 받은 공개 키를 믿을 수 있는지 보증
- 생성자, 조작여부, 유효 기간 등 정보 포함
- 인증 기관 (CA)2이 서명값과 함께 인증서를 발급
- 서명 값 생성 방식 : 인증서 내용에 대한 해시 값 (fingerprint)을 CA의 개인 키로 암호화
- 디지털 서명 절차
- 서버로부터 서명 값이 붙은 인증서 전달 받음
- 서명 값과 인증서 분리
- 서명 값은 CA의 공개 키로 복호화해서 인증서 내용에 대한 해시 값 얻음
- 인증서 데이터에 대한 해시 값 구한 뒤 위에서 얻은 값과 비교
- 일치하는 경우 인증서에 포함된 공개 키를 안심하고 사용 가능
HTTPS: SSL/TLS를 사용하는 대표적인 프로토콜
- 위에서 다룬 암호화 방식 기반으로 동작하는 프로토콜로 SSL, TLS가 있음
- SSL (secure sockets layer) : 인증과 암호화를 수행하는 프로토콜
- TLS (transport layer security) : SSL을 계승한 프로토콜
HTTPS (HTTP over TLS): SSL/TLS를 사용하는 대표적인 프로토콜
- HTTPS 메시지 송수신 방식
- TCP 3-way handshake
- 두 호스트가 각각 SYN, SYN+ACK, ACK 세그먼트 주고받는 과정
- TLS handshake : 암호화 통신을 위한 키를 교환하고 인증서 송수신과 검증 이루어짐
- 클라이언트가 ‘ClientHello’ 메시지 보냄
- 지원되는 TLS 버전, 사용 가능한 암호화 방식과 해시 함수 (암호 스위트, cipher suite), 키를 만들기 위해 사용할 클라이언트의 난수 등 암호화된 통신을 위해 서로 맞춰봐야 할 정보를 제시하는 메시지
- 암호 스위트 예시 :
TLS_AES_128_GCM_SHA256
- AES_128_GCM : 암호화 알고리즘
- SHA256 : 해시 함수
- 서버는 응답으로 ‘ServerHello’ 메시지 전송
- 선택된 TLS 버전, 암호 스위트와 키를 만들기 위해 사용할 서버의 난수 등 제시된 정보들을 선택하는 메시지
- 이렇게 결정된 정보를 토대로 서버와 클라이언트는 암호화에 사용될 키 만들어 냄
- 서버는 응답으로 ‘Certificate’, ‘CertificateVerify’ 메시지 전송
- 인증서와 검증을 위한 디지털 서명으로 클라이언트는 이 메시지를 토대로 서버의 공개 키 검증
- 클라이언트와 서버는 서로 Finished 메세지 주고 받으며 TLS handshake 마무리
- 클라이언트가 ‘ClientHello’ 메시지 보냄
- 암호화된 메시지 송수신
- TCP 3-way handshake