<관련 포스팅>
[네트워크] HTTP 버전 차이(0.9/1.0/1.1/2.0/3.0)
HTTPS
특징
- HTTPS란 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말함
- 이를 통해 ‘통신을 암호화’함
- HTTP/2는 HTTPS 위에서 동작함
SSL/TLS(Secure Socket Layer/Transport Layer Security)
- TLS와 SSL은 동일한 의미를 가진 단어로, TLS가 SSL의 새로운 버전이라고 생각하면 됨
- SSL/TLS는 전송 계층에서 보안을 제공하는 프로토콜
- 네트워크로 통신하는 과정에서 도청, 간섭, 위조를 방지하기 위해 설계됨
- 보안 세션을 기반으로 데이터를 암호화하며 보안 세션이 만들어질 때 인증 메커니즘, 키 교환 암호화 알고리즘, 해싱 알고리즘이 사용됨
보안 세션
- 세션이란 운영체제가 어떠한 사용자로부터 자신의 자산 이용을 허락하는 일정한 기간을 뜻함
- 보안 세션이란 보안이 시작되고 끝나는 동안 유지되는 세션
- SSL 핸드셰이크를 통해 보안 세션을 생성하고 이를 기반으로 상태 정보 등을 공유함
인증 메커니즘
- CA(Certificate Authorities)에서 발급한 인증서를 기반으로 이루어짐
- CA에서 발급한 인증서는 안전한 연결을 시작하는 데 있어 필요한 ‘공개키’를 클라이언트에 제공하고 사용자가 접속한 서버가 ‘신뢰할 수 있는’ 서버임을 보장함
- 인증서는 서비스 정보, 공개키, 지문, 디지털 서명 등으로 이루어져 있음
- CA는 신뢰성이 엄격하게 공인된 기업들만 참여할 수 있음
암호화 알고리즘(디피-헬만 키 교환 암호화 알고리즘)
- 암호키를 교환하는 하나의 방법
$$ y = g^x mod p $$
- g와 x와 p를 안다면 y는 구하기 쉽지만, g와 y와 p만 안다면 x를 구하기는 어렵다는 원리에 기반한 알고리즘
- 처음에 공개 값을 공유하고 각자의 비밀 값과 혼합한 후 혼합 값을 공유함
- 그다음 각자의 비밀 값과 또 혼합하면 공통의 암호키가 생성되는 것
- 클라이언트와 서버 모두 개인키와 공개키를 생성하고 서로에게 공개키를 보내고 공개키와 개인키를 결합하여 PSK(사전 합의된 비밀키)가 생성됨
해싱 알고리즘
- 해시란 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한 값
- 데이터를 추정하기 힘들도록 더 작고, 섞여있는 조각으로 만드는 알고리즘
- 비트 코인을 비롯한 많은 블록체인 시스템에서도 사용함
SSL Handshake(5-way handshake)
대칭키/공개키 암호화에 대한 사전 지식이 필요합니다.
요약
- 클라이언트와 서버가 키를 공유하고 이를 기반으로 인증, 인증 확인 등의 작업이 일어나 한 번의 1-RTT가 생긴 후 데이터를 송수신함
- 클라이언트가 서버로 사이퍼 슈트(프로토콜과 해싱 알고리즘 등이 나열된 규약)를 전달하면 서버는 그 암호화 알고리즘 리스트 중 제공할 수 있는 것을 확인함
- 서버에서 클라이언트로 인증서를 보내는 인증 메커니즘이 시작되고 이후 해싱 알고리즘 등으로 암호화된 데이터의 송수신이 시작됨
⇒ 대칭키는 공개키에 비해 빠르지만 키 배송 문제가 존재하기 때문에, SSL 핸드쉐이킹 과정에서는 Key를 공유하기 위해 공개키 방식을 사용하고, 세션이 형성된 후에는 대칭키 방식으로 효율을 높임
핸드쉐이크 과정
- Client → Server: Client Hello
- 클라이언트는 랜덤한 데이터와 현재 지원가능한 암호화 방식을 서버에게 전달
- 자신의 능력을 서버에게 말해주는 과정
- Server → Client: Server Hello
- 서버는 세 가지 데이터로 응답함
- (1) 인증서 with 공개키
(2) 서버에서 생성한 랜덤한 데이터
(3) 가장 안전한 암호화 수단 방식 - 암호화 수단 방식은 클라이언트가 지원가능한 암호화 방식 목록 중 선택함
- Client: 인증서 확인
- 클라이언트는 내장되어있는 CA 리스트에서 각 CA의 공개키를 이용하여 서버가 보낸 인증서를 복호화함
- 만약 CA 리스트에 없는 인증서라면 사용자에게 경고 메세지 표시하고, 복호화에 성공하면 시 해당 서버를 신뢰하게 됨
- 클라이언트가 전송한 랜덤한 데이터와 서버가 전송한 랜덤한 데이터를 조합하여 Pre Master Secret 키를 생성
- Client → Server: 시크릿 키를 서버에 전송
- 이 때 시크릿 키는 절대 노출되어서는 안됨
- 2번에서 받은 공개키를 사용하여 Pre Master Secret 키를 암호화하여 서버로 전송
- Server: 시크릿 키 복호화
- 서버는 이 시크릿 키값을 자신의 비밀키로 복호화함
- 이로써 클라이언트와 서버는 시크릿 키를 공유하게 됨
- Server: 세션키(대칭키) 생성
- Pre Master Secret 값을 Master Secret 값으로 만듦
- Master Secret 값을 이용하여 Session Key를 만듦
- Client ↔ Server: 세션 형성
- 클라이언트와 서버 간의 세션이 형성되고, 세션키를 이용하여 암호화하여 데이터를 주고받음
- 즉 대칭키 방식을 활용하는 것
References
'Computer Science > 네트워크' 카테고리의 다른 글
[네트워크] HTTP 버전 차이(0.9/1.0/1.1/2.0/3.0) (0) | 2023.02.18 |
---|---|
[네트워크 IP] DHCP, NAT (0) | 2023.02.18 |
[네트워크 IP] IP 주소 체계(클래스 기반 할당 방식, 서브넷 마스크) (0) | 2023.02.08 |
[네트워크 IP] IP 기반 통신(ARP, 게이트웨이) (0) | 2023.02.07 |
[네트워크] OSI 7계층 기기(허브, 브리지, 스위치, 라우터) (0) | 2023.02.01 |