개발여행
SSL/TLS 프로토콜의 암호화 과정 본문
SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 인터넷 상에서 데이터를 암호화하고 인증하기 위한 프로토콜이다. 둘 다 HTTPS의 기반이 되며, TLS는 SSL의 개선된 버전으로 주로 사용된다. TLS는 데이터를 암호화하여 중간에서 탈취당하더라도 해독이 불가능하게 하고, 서버와 클라이언트 간에 보안 채널을 설정하여 통신의 기밀성과 무결성을 보장한다.
대칭키 암호화
대칭키 암호화는 데이터를 암호화하고 복호화할 때 동일한 "비밀 키"를 사용하는 방식이다. 송신자와 수신자가 같은 키를 사용하기 때문에 데이터 전송 속도가 빠르고 처리 효율이 높다. 대칭키 암호화는 속도가 빠르지만, 키를 송신자와 수신자가 모두 알아야 하므로 키를 안전하게 전달하는 문제가 있다.
- 대표적인 알고리즘: AES, DES
비대칭키 암호화
비대칭키 암호화 방식은 서로 다른 두 개의 키, 즉 공개키와 비밀키(개인키)를 사용한다. 공개키는 누구나 접근할 수 있지만, 비밀키는 소유자만이 알고 있어야 한다. 비대칭키 암호화 방식에서 데이터는 공개키로 암호화되고, 비밀키로만 복호화할 수 있다. 이 방식은 대칭키 암호화보다 보안성이 뛰어나지만, 암호화/복호화 속도는 느린 편이다.
- 대표적인 알고리즘: RSA, ECC
암호화 과정
HTTPS 연결에서 SSL/TLS handshake는 서버와 클라이언트가 보안 연결을 설정하는 과정이다. 주로 다음의 단계로 구성된다:
- 클라이언트 Hello: 클라이언트가 서버에 연결을 요청하며 사용할 수 있는 암호화 방식(암호 스위트) 목록과 TLS 버전을 보낸다.
- 서버 Hello: 서버가 클라이언트의 요청을 확인한 후 사용할 암호화 방식, TLS 버전을 결정하고, 자신의 SSL/TLS 인증서를 클라이언트에 전송한다. 인증서에는 서버의 공개키가 포함되어 있다.
- 인증서 검증: 클라이언트는 서버의 인증서가 신뢰할 수 있는 인증 기관(CA)에 의해 발급된 것인지 확인한다. 만약 인증서가 신뢰할 수 없다면 연결을 중단한다.
- 프리마스터 시크릿 생성: 클라이언트는 서버의 공개키를 이용해 ‘프리마스터 시크릿’을 암호화하여 서버에 전송한다. 프리마스터 시크릿은 클라이언트와 서버가 공유할 세션 키를 생성하는 데 사용된다.
- 세션 키 생성: 클라이언트와 서버는 프리마스터 시크릿을 기반으로 대칭키(세션 키)를 생성한다. 이후의 데이터 전송은 이 대칭키를 이용해 암호화된다.
- 마무리 메시지: 양쪽이 암호화가 제대로 설정되었음을 확인하는 메시지를 교환하며, 핸드셰이크 과정이 끝난다.
이후 클라이언트와 서버는 안전하게 세션 키를 사용하여 암호화된 데이터 통신을 수행한다.
전자 서명
전자 서명은 데이터의 출처와 무결성을 확인하는 데 사용하는 디지털 서명이다. 특정 데이터를 서명자의 비밀키로 암호화하여 생성하며, 누구나 서명자의 공개키로 복호화하여 서명을 확인할 수 있다. 전자 서명을 통해 데이터가 위변조되지 않았고, 서명자에 의해 생성되었음을 보장할 수 있다. 이는 주로 계약서와 같은 중요한 문서의 디지털 인증에 사용된다.
'CS' 카테고리의 다른 글
웹 리소스 전송 관련 정책 (0) | 2024.11.16 |
---|---|
쿠키, 세션, JWT 토큰으로 사용자 세션 유지 (0) | 2024.11.15 |
DNS가 뭔가요? (0) | 2024.11.06 |
HTTP 버전에 대해 알아보기 (0) | 2024.11.04 |
웹 통신: TCP/IP 프로토콜과 OSI 7 계층모델 (0) | 2024.10.31 |