[혼자 공부하는 네트워크] 7-2 안전성을 위한 기술

술술·2024년 9월 20일
0

암호와 인증서

  • 암호화와 복호화의 핵심은 키

대칭 키 암호화 방식과 공개 키 암호화 방식

  • 키는 무작위해 보이는 문자열처럼 생겼다.
  • 키와 원문 데이터에 수학적 연산 과정을 거치면 암호문이 생성됨
  • 수학적 연산 과정을 암호화 알고리즘이라 부름
  • 데이터를 암호화하고 복호화하는 방법에는 대칭 키 암호화와 비대칭 키 암호화라는 두 가지 방식이 있다.

  • 대칭 키 암호화(symmetric key cryptography)
    • 암호화와 복호화에 동일한 키 사용
    • 상대방에게 안전하게 키를 전달하기 어렵다
    • 상대방에게 키를 안전하게 전달할 수 있는 방법이 있다면 그 방법으로 메시지를 주고받으면 됐지, 굳이 암호화를 할 필요가 없을 것

  • 공개 키 암호화(public key cryptography)
    • 비대칭 키 암호화(asymmetric key cryptography)
    • 공개 키 암호 방식에서는 암호화를 위한 키와 복호화를 위한 키가 다름
    • 한 키로 암호화 했다면 다른 키로 복호화
    • 이 한 쌍의 키를 각각 공개 키와 개인 키라 부름
    • 공개 키만으로는 개인 키를 유추할 수 없고, 반대로 개인 키만으로 공개 키를 유추할 수도 없다.
    • 공개 키는 이름처럼 누구에게나 공개해도 무방
    • 개인 키만큼은 절대로 유출되지 않도록 보안을 유지
    • A가 B의 공개 키를 요청하고 B는 A에게 공개 키를 전달
    • 공개 키는 누구에게나 공개해도 무방하므로 그냥 전송
    • A는 전달받은 B의 공개 키로 메시지를 암호화 한 뒤 그 암호문을 B에게 전송
      • 암호문이기에 제 3자가 메시지를 보아도 이를 이해할 수 없음
    • B는 개인 키가 있으므로 암호를 복호화해서 메시지 확인

  • 대칭 키 암호화와 공개 키 암호화의 장단점
    • 대칭 키 암호화는 키를 안전하게 전송하기 어렵지만, 적은 부하 덕분에 암호화 및 복호화를 빠르게 수행
    • 공개 키 암호화는 암호화 및 복호화에 시간과 부하가 상대적으로 많이 들지만, 키를 안전하게 공유
    • 대칭 키 암호화 방식과 공개 키 암호화 방식을 함께 사용하는 경우가 많다.
    • 대칭 키를 상대에게 안전하게 전달하기 위해 공개 키로 대칭 키를 암호화하고, 개인 키로 암호화된 대칭 키를 복호화
    • 이렇게 하면 대칭 키를 안전하게 공유함과 동시에 공유한 대칭 키를 이용해 빠르게 암호화/복호화를 수행
    • 이러한 방식으로 활용되는 대칭 키를 세션 키(session key)라고 부름



인증서와 디지털 서명

  • 공개 키 인증서(public key certificate)
    • 공개 키와 공개 키의 유효성을 입증하기 위한 전자 문서

❓ 전달받은 공개 키가 정말 신뢰할 수 있는 것인지, 전송 도중에 조작되지는 않았는지 확신할 수 있을까?

→ 공개 키 하나만 전달받는다면 확신할 수 없음

그래서 웹 서버는 공개 키뿐만 아니라 누가 생성 했는지, 조작 되지는 않았는지, 유효 기간은 언제까지인지 등의 내용을 포함한 인증서를 전송

  • 인증서는 인증 기관(CA, Certification Authoriy)이라는 제 3의 기관에서 발급
    • 인증서의 발급, 검증, 저장과 같은 역할을 수행할 수 있는 공인 기관
  • CA가 발급한 인증서에는 ‘이 공개 키 인증서는 진짜야. 내가 보증할게’ 라는 내용을 담은 서명값(signature)이 있음
    • 클라이언트는 이 서명 값을 바탕으로 인증서를 검증


  • 서명 값
    • 인증서 내용에 대한 해시 값을 CA의 개인 키로 암호화하는 방식으로 만들어짐
    • CA는 이렇게 얻어낸 정보를 서명 값으로 삼아 클라이언트에게 인증서와 함께 전송


  • 해시 값
    • 해시 함수를 적용시킨 결괏값을 의미
    • 해시 함수: 임의의 길이의 데이터를 고정된 길이의 데이터로 변환해 주는 함수
      • 이 함수를 적용시키면 일정한 길이의 데이터가 생성되는 것
      • 대표적인 해시 함수 MD5, SHA-1, SHA-2(SHA-256, SHA-384, SHA-512)
      • 입력 데이터가 조금만 달라져도 완전히 다른 결과가 나온다
    • 해시 함수와 그에 따른 해시 값은 입력값의 변화에 매우 민감하므로 주로 데이터 변조 여부를 검사하는데 사용
    • 보내고자 하는 데이터와 더불어 그 데이터에 대해 특정 해시 함수를 적용시킨 해시 값을 같이 전송한다
    • 수신자가 전달받은 데이터에 대한 해시 값을 직접 계산한 뒤, 계산 결과를 전달받은 해시 값과 비교했을 때 같은 값이 도출된다면 데이터 전송 도중 변조되거나 소실되지 않았다고 판단

  • 웹 브라우저를 통해 서버로부터 서명 값이 붙은 인증서를 전달받았다고 가정
    • 인증서 검증을 위해 가장 먼저 할 일은 서명 값과 인증서를 분리하는 것
    • CA의 공개 키는 공개되어 있기에, 서명 값은 CA 공개 키로 복호화 할 수 있다.
    • 서명 값을 CA의 공개 키로 복호화하면 인증서 내용에 대한 해시 값을 얻을 수 있다.
    • 인증서 데이터에 대한 해시 값을 직접 구한 뒤, 이를 복호화 한 값과 비교
    • 값이 일치한다면 전달받은 인증서는 확실히 CA의 개인 키로 만들어졌다.
      • CA의 공개 키로 복호화가 가능하다는 뜻
    • 개인 키로 암호화 된 메시지를 공개 키로 복호화함으로써 신원을 증명하는 절차를 디지털 서명(digital signature)이라 부름





HTTPS: SSL과 TLS

  • SSL(Secure Sockets Layer)
    • 인증과 암호화를 수행하는 프로토콜
  • TLS(Transport Layer Security)
    • SSL을 계승한 프로토콜
  • SSL 2.0, SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3 이 순차적으로 출시
  • SSL/TLS 를 사용하는 대표적인 프로토콜은 HTTPS
  • HTTPS는 HTTP 메시지의 안전한 송수신을 위해 개발된 프로토콜


HTTPS 메시지 송수신 단계

  1. TCP 쓰리 웨이 핸드셰이크
    • TCP 연결을 수립하기 위해 두 호스트가 각각 SYN, SYN+ACK, ACK 플래그가 설정된 TCP 세그먼트를 주고받는 것이 쓰리 웨이 핸드셰이크

  2. TLS 핸드셰이크
    • 암호화 통신을 위한 키를 교환한다.
    • 인증서 송수신과 검증이 이루어진다.
    • 클라이언트는 ClientHello 메시지를 보냄
      • 암호화 된 통신을 위해 서로 맞춰 봐야 할 정보들을 제시하는 메시지
    • 지원되는 TLS 버전, 사용 가능한 암호화 방식과 해시 함수, 키를 만들기 위해 사용할 클라이언트의 난수 등이 포함
    • 암호 스위트(cipher suite): 사용 가능한 암호화 방식과 해시 함수를 담은 정보

    • 서버는 ClientHello 메시지에 대한 응답으로 ServerHello 메시지를 전송
    • ServerHello 메시지는 제시된 정보들을 선택하는 메시지
    • CilentHello 메시지와 ServerHello 메시지를 주고받으면 암호화 된 통신을 위해 사전 협의해야 할 정보들이 결정됨
    • 이렇게 결정된 정보를 토대로 서버와 클라이언트는 암호화에 사용할 키를 만들어낼 수 있다.
    • 서버는 Certificate 메시지와 CertificateVerify 메시지를 전송
      • 각각 인증서와 검증을 위한 디지털 서명을 의미
      • 클라이언트는 이 메시지를 토대로 서버의 공개 키를 검증
    • 서버와 클라이언트는 TLS 핸드셰이크의 마지막을 의미하는 Finished 메시지를 주고 받음

  1. 암호화 된 메시지 송수신
profile
Hello

0개의 댓글

관련 채용 정보