어렵고 고급지식 https://www.inflearn.com/courses/lecture?courseId=328823&type=LECTURE&unitId=129789&subtitleLanguage=ko&tab=curriculum

근데 큰돌이 별 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

  • 서버는 클라의 메시지 분석한 후 다음과 같은 과정 진행
      1. 클라와 공통으로 지원하는 TLS 중 가장 높은거 선택
      1. 클라가 제안한 사이퍼슈트 중 서버가 지원하는 암호 조합 선택
      1. ServerHello 메시지 보내면서 다음을 포함:
      • 선택된 TLS version
      • 선택된 사이퍼슈트
      • 서버 랜덤값
      • 서버 측 ECDHE 공개키

3. 이후, 다음 메시지들 이어짐

  • Encrypted Extensions: SNI, ALPN 등 추가 정보를 암호화된 상태로 전달
  • Certificate: 서버의 공개키가 담긴 디지털 인증서 전달
  • CertificateVerify: 서버가 해당 인증서를 실제로 소유하고 있다는 것을 서명으로 증명 이 후 클라는 인증서 검증하며, 동시에 클라와 서버는 서로 교환한 ECDHE 공개키 바탕으로 세션키를 생성

4. Finished

  • 클라와 서버는 각각 Finished 메시지를 교환. 이후의 통신은 세션키로 암호화되며, 이후 모든 통신은 AES같은 대칭 암호화 방식으로 보호됨

RSA와 DH 차이

DH(ECDHE)는

  1. 공개값
  2. 공개값으로 만든 A,B
  3. 클라, 서버 둘다 같은 세션키
  • 각각 공유한 공개값 + 각각의 개인키를 기반으로 세션값을 각각 만든다. RSA는
  • 서버가 클라에 공개키
  • 클라는 공개키로 세션키 만듬
  • 서버에서는 클라에서준 세션키를 개인키로 복호화
  • 문제
    • 세션키를 보냄. 탈취 가능성
    • 세션키만 알면 서버는 이걸로 구분하기에 약탈자인지 주인인지 모름!

사이퍼슈트

  • 프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약
  • 암호제품군이라고도 불림
  • TLS 1.3 버전에는 5개 있음

AEAD 사이퍼 모드

  • Authenticated Encryption with Associated Data 는 데이터 암호화 알고리즘
  • AES_128_GCM 등 있음
  • 예를들어
    • AES_128_GCM이란것은 128비트 키를 사용하는 표준 블록 암호화 기술과 병렬 계산에 용이한 알고리즘 GCM이 결합된 알고리즘 뜻함

해싱 알고리즘

  • 해싱 만드는 알고리즘
  • SHA 256이 대표적
    • 해시: 다양한 길이 가진 데이터를 고정된 길이 가진 데이터로 매핑한 값
    • 해싱: 임의 데이터를 해시로 바꿔주는 과정. 해시 함수가 이를 담당
    • 해시 함수: 임의의 데이터를 입력으로 받아 고정된 길이의 해시로 바꿔주는 함수

전자서명

TLS에서 해싱알고리즘은 전자서명을 검증할 때 쓰임 이 과정 통해 “이 인증서가 진짜 이 서버것이 맞는지”, “중간에 누가 위조, 변조하지 않았는지”확인

인증서 검증 과정

  • 사용자가 브라우저 통해 A 사이트 접속
  • 사이트는 인증서를 브라우저에 보냄

0 - RTT