근데 큰돌이 별 2개로 해놓았네 우선순위좀 낮게해도 될듯함 250613
- SSL(Secure Socket Layer)은 SSL 1.0, 2.0, 3.0, TLS(TransportLayer Security Protocol) 1.0, TLS 1.3 까지 버전이 올라가며 마지막으로 명칭이 TLS로 됨
- 여기선 TLS 1.3 기반 설명
TLS 핸드셰이크 과정

1. ClientHello
- 클라는 서버에게 먼저 ClientHello 메시지 보냄. 이 안에는
- 클라가 지원하는 TLS 버전 목록(예: 1.2, 1.3)
- 클라가 지원하는 사이퍼슈트(Cipher Suites) 목록
- 클라 랜덤값(난수로 세션키 생성에 사용)
- 클라 측 ECDHE 공개키
2. ServerHello
- 서버는 클라의 메시지 분석한 후 다음과 같은 과정 진행
-
- 클라와 공통으로 지원하는 TLS 중 가장 높은거 선택
-
- 클라가 제안한 사이퍼슈트 중 서버가 지원하는 암호 조합 선택
-
- ServerHello 메시지 보내면서 다음을 포함:
- 선택된 TLS version
- 선택된 사이퍼슈트
- 서버 랜덤값
- 서버 측 ECDHE 공개키
-
3. 이후, 다음 메시지들 이어짐
- Encrypted Extensions: SNI, ALPN 등 추가 정보를 암호화된 상태로 전달
- Certificate: 서버의 공개키가 담긴 디지털 인증서 전달
- CertificateVerify: 서버가 해당 인증서를 실제로 소유하고 있다는 것을 서명으로 증명 이 후 클라는 인증서 검증하며, 동시에 클라와 서버는 서로 교환한 ECDHE 공개키 바탕으로 세션키를 생성
4. Finished
- 클라와 서버는 각각 Finished 메시지를 교환. 이후의 통신은 세션키로 암호화되며, 이후 모든 통신은 AES같은 대칭 암호화 방식으로 보호됨
RSA와 DH 차이
DH(ECDHE)는
- 공개값
- 공개값으로 만든 A,B
- 클라, 서버 둘다 같은 세션키
- 각각 공유한 공개값 + 각각의 개인키를 기반으로 세션값을 각각 만든다. RSA는
- 서버가 클라에 공개키
- 클라는 공개키로 세션키 만듬
- 서버에서는 클라에서준 세션키를 개인키로 복호화
- 문제
- 세션키를 보냄. 탈취 가능성
- 세션키만 알면 서버는 이걸로 구분하기에 약탈자인지 주인인지 모름!
사이퍼슈트
- 프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약
- 암호제품군이라고도 불림
- TLS 1.3 버전에는 5개 있음


AEAD 사이퍼 모드
- Authenticated Encryption with Associated Data 는 데이터 암호화 알고리즘
- AES_128_GCM 등 있음
- 예를들어
- AES_128_GCM이란것은 128비트 키를 사용하는 표준 블록 암호화 기술과 병렬 계산에 용이한 알고리즘 GCM이 결합된 알고리즘 뜻함
해싱 알고리즘
- 해싱 만드는 알고리즘
- SHA 256이 대표적
- 해시: 다양한 길이 가진 데이터를 고정된 길이 가진 데이터로 매핑한 값
- 해싱: 임의 데이터를 해시로 바꿔주는 과정. 해시 함수가 이를 담당
- 해시 함수: 임의의 데이터를 입력으로 받아 고정된 길이의 해시로 바꿔주는 함수
전자서명
TLS에서 해싱알고리즘은 전자서명을 검증할 때 쓰임 이 과정 통해 “이 인증서가 진짜 이 서버것이 맞는지”, “중간에 누가 위조, 변조하지 않았는지”확인
인증서 검증 과정
- 사용자가 브라우저 통해 A 사이트 접속
- 사이트는 인증서를 브라우저에 보냄