암호화: 데이터를 승인된 수신자만이 이해할 수 있도록 스크램블하는 방법
→ 스크램블: 데이터를 일정한 패턴이 아닌 무작위 방식으로 개별 데이터 비트를 섞는 것
복호화: 암호화된 데이터를 원래의 형태로 되돌리는 과정으로, 데이터를 해독하기 위해 송신자와 수신자 모두가 동의한 특정 키가 필요
대칭 암호화: 키를 하나만 사용하는 암호화 방법으로, 암호화와 복호화에 동일한 키를 사용
- 단점: 중간에서 키 값을 가로채는 공격자가 있을 경우 암호화된 정보가 노출될 수 있다.
- 종류: AES, DES 등
비대칭 암호화 (공개키 암호화): 공개키와 개인키를 사용하는 암호화 방식
- 공개키로 암호화된 데이터는 개인키를 통해서만 복호화할 수 있다.
- 공개키(암호화) → 개인키(복호화): 데이터를 안전하게 송신 가능
- 개인키(암호화) → 공개키(복호화): 데이터를 신뢰할 수 있음
- TLS 핸드셰이크 과정에서 비대칭 암호화가 사용
- 초기 인증 단계에서 비대칭 암호화를 사용하여 서로의 신원을 확인하고, 이후의 통신에서는 세션 키를 사용한 대칭 암호화가 사용
암호화 사용이유
- 민감한 데이터 유출 방지
- 데이터 무결성 보장
- 의도된 송수신자 외에 통신이 불가능하도록 (하이재킹 방지)
전송 계층에서 보안을 제공하는 프로토콜이며, 통신에 있어 메세지의 변조 및 도청을 막는다.
핸드셰이크 과정에서 비대칭 암호화 사용
TLS 1.3v: 1-RTT 핸드셰이크
→ 핸드셰이크 이후에 세션키가 생성되므로, 웹 사이트를 재방문할 때 이미 생성된 세션 키를 사용하여 연결 설정을 한다.
이에 따라, 인증 비용이 감소하고 통신이 더 빠르게 이루어질 수 있다.
- ClientHello: 클라이언트는 핸드셰이크를 시작하기 위해 서버에게 ClientHello 메시지 전송
- TLS 버전
- 사이퍼슈트: 사용하려는 암호화 알고리즘과 해싱 알고리즘에 대한 규격 목록
- 클라이언트 랜덤 값: 무작위 생성된 값으로, 세션 키를 생성하는 데 사용
- 임시 DH(Diffie-Hellman) 매개변수: 공통의 암호키를 생성하기 위한 Diffie-Hellman 알고리즘에 필요한 값들을 포함
→ 공개 값 공유 → 비밀 값과 혼합 → 혼합 값 공유 → 비밀 값과 혼합 → 공통의 암호키 생성
- ServerHello: 서버는 클라이언트의 ClientHello 메시지를 받고, 적절한 TLS 버전과 암호화 설정을 선택하여 ServerHello 메시지를 응답
- Key Exchange: 핸드셰이크 과정에서는 임시 DH(Diffie-Hellman) 매개변수를 사용하여 공통의 암호키를 생성
- 암호화와 인증: 핸드셰이크가 완료되면, 클라이언트와 서버는 암호화된 통신을 시작