학부과정에서부터 SSL, TLS, HTTPS, HTTP에 대해서 무지 많이 들어왔었을 것이다.
나 역시 마찬가지였었고, 회사에서 R&D 프로젝트의 프로토타입이 완성되어 도메인과 HTTPS 인증서를 갱신해주어야 하는 업무가 있었다.
Q. HTTP와 HTTPS의 차이점이 뭔가요?
A. HTTP는 평문으로 데이터를 주고받아 보안 위험성이 존재하여 그걸 암호화 한것입니다....?
나의 지식 밑바닥을 보여준 답변이 아닐까싶다. 이번 기회에 제대로 한 번 알아보고자 한다.
먼저, SSL/TLS는 인터넷 통신의 보안을 위한 암호화 프로토콜이다.
SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 네트워크 통신에서 데이터를 안전하게 주고받기 위한 기술이다. TLS는 SSL의 후속 버전으로, 현재는 TLS가 주로 사용되지만 관행적으로 'SSL/TLS'라고 함께 부른다.
주요 특징과 기능:
- 암호화: 데이터를 암호화하여 제3자가 내용을 읽을 수 없다.
- 인증: 디지털 인증서를 통해 통신 상대의 신원을 확인
- 무결성: 데이터가 전송 중에 변조되지 않았는지 확인
SSL/TLS의 작동 방식:
- 핸드셰이크 과정: 클라이언트와 서버가 서로 인증하고 어떤 암호화 알고리즘을 사용할지 협상
- 인증서 확인: 서버는 인증 기관(CA)이 서명한 디지털 인증서를 제공하고, 클라이언트는 이를 확인
- 키 교환: 안전한 통신을 위한 대칭 키를 생성하고 교환
- 암호화된 통신: 협상된 키와 알고리즘을 사용하여 데이터를 암호화하고 전송
일상에서 SSL/TLS는 웹사이트 주소가 'https://'로 시작하거나 브라우저에 자물쇠 아이콘이 표시될 때 사용되고 있다.
대칭키를 생성하고 교환하는 부분이 이해가 가지 않을 수 있다. 왜냐하면 대칭키 방식은 공개키 방식에 비해 하나의 키로 데이터를 암/복호화하기 때문에 보안에 취약하다.
하지만 내부적으로 SSL/TLS는 하이브리드 암호화 시스템을 사용한다.
두 암호화 방식을 함께 사용하는 이유:
- 공개키(비대칭) 암호화: 안전한 키 교환이 가능하지만, 계산 비용이 높고 속도가 느리다.
- 대칭키 암호화: 계산 비용이 낮고 속도가 빠르지만, 키 교환이 안전하게 이루어져야 한다.
따라서 SSL/TLS는 안전한 키 교환을 위해 공개키 암호화를 사용하고, 효율적인 데이터 전송을 위해 대칭키 암호화를 사용한다. 하이브리드 접근 방식은 보안성과 성능 모두를 확보할 수 있게 된다.
통신 과정
- Client Hello:
- 클라이언트가 서버에 연결을 시작하며 랜덤 데이터 생성
- 지원하는 암호화 방식(암호화 스위트)을 서버에 전달
- Server Hello:
- 서버가 응답하며 자신의 랜덤 데이터 생성
- 서버가 선택한 암호화 방식(클라이언트가 제안한 것 중)을 알림
- 디지털 인증서(서버의 공개키 포함) 전송
- 인증서 검증:
- 클라이언트가 서버의 인증서를 신뢰할 수 있는 인증 기관(CA)에서 발급된 것인지 확인
- 클라이언트가 임의의 Pre-master Secret 값 생성
- Pre-master Secret 전송:
- 클라이언트는 생성한 Pre-master Secret을 서버의 공개키로 암호화하여 전송
- Pre-master Secret 복호화:
- 서버는 자신의 개인키를 사용하여 암호화된 Pre-master Secret을 복호화
- Master Secret 생성:
- 클라이언트와 서버 모두 Pre-master Secret과 이전에 교환한 랜덤 데이터를 사용하여 동일한 Master Secret 계산
- 세션 키(대칭키) 생성:
- 양측 모두 Master Secret으로부터 실제 데이터 암호화에 사용할 세션 키(대칭키) 생성
- 암호화된 데이터 통신:
- 생성된 세션 키를 사용하여 대칭키 암호화 방식으로 데이터 통신 시작
- 세션 종료:
- 통신이 완료되면 세션 키 폐기
이 과정을 통해 초기에는 공개키(비대칭키) 암호화를 사용하여 안전하게 키를 교환하고, 이후 실제 데이터 통신은 빠른 대칭키 암호화를 사용하여 효율적으로 진행한다.
Q. SSL프로토콜에서 Pre-master Secret과 Master Secret을 분리해서 생성하는 이유는 뭘까?
- 추가적인 난수성 보장 - Pre-master Secret에 클라이언트와 서버의 랜덤값(Client Random, Server Random)을 혼합하여 Master Secret을 만듦으로써 최종 키 재료의 난수성을 높임
- 키 파생의 유연성 - Master Secret에서 여러 세션 키(암호화 키, MAC 키, IV 등)를 파생시킬 수 있어 다양한 보안 목적에 맞는 키를 생성할 수 있음
머릿말에서 물었던 질문에 대해 다시 답변해보자.
Q. HTTP와 HTTPS의 차이점이 뭔가요?
A. HTTP와 HTTPS의 차이점은 보안 계층의 존재 여부입니다. HTTP는 웹 서버와 클라이언트 간 데이터를 주고받기 위한 기본 프로토콜로, 평문 형태로 통신하기 때문에 중간에 데이터가 탈취되거나 변조될 위험이 있습니다. 반면 HTTPS는 HTTP에 TLS/SSL 암호화 계층을 추가한 프로토콜입니다.
1. 데이터 암호화: 클라이언트와 서버 간 주고받는 모든 데이터를 암호화하여 제3자가 내용을 볼 수 없게 합니다.
2. 데이터 무결성: 전송 과정에서 데이터 변조 여부를 확인할 수 있습니다.
3. 인증: 인증서를 통해 사용자가 의도한 정확한 웹사이트와 통신하고 있음을 보장합니다.
HTTPS는 인증기관(CA)에서 발급한 SSL/TLS 인증서를 사용하며, 기본적으로 443 포트를 사용하는 반면, HTTP는 80 포트를 사용합니다. 오늘날 개인정보 보호와 보안이 중요해짐에 따라 대부분의 웹사이트는 HTTPS를 표준으로 채택하고 있습니다.