ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP vs HTTPS (with SSL, 대칭키, 공개키)
    Computer Science🖥️/Network 2024. 10. 24. 18:38

    이 둘에 대해 매번 찾다가 결국 암호화 방식까지 궁금해서 다 찾게 되었다.

    매번 대칭키, 공개키를 볼때마다 찾는 것 같아서 ㅎ… 정리하려고 한다.

    HTTP vs HTTPS

    HTTP(Hyptertext Transfer Protocol)는 텍스트 기반 프로토콜로, 주로 웹 브라우저 & 서버 간에 데이터를 전송할 때 사용하는 어플리케이션 계층의 프로토콜이다.

    HTTP의 통신이 상대를 확인하지 않고 요청을 주고 받는 특징을 가졌기 때문에 보안에 취약한데..
    이를 해결하기 위해서 HTTP + SSL 로 통신 내용을 암호화 하는 방식인 “HTTPS 프로토콜”이 나오게 된다.

    SSL이란 ?

    SSL(Secure Sockets Layer)가 발전되게 TLS로 버전업되면서 이름이 바뀌었다.

    SSL은 위와같이, HTTP - TCP의 직접적인 통신은 막고 SSL을 하나 감싸게 된다.

    쉽게 말하면 사용자가 HTTP 프로토콜로 메시지를 보내면 → 바로 TCP/IP를 통해 보내지던 과정에서
    TCP/IP로 보내기 전에 SSL의 암호화로 감싸는 것이다.
    (*SSL은 사진처럼 따로 계층이 생기는 것은 아니고, TCP - HTTP 사이에 잠깐 껴있는 인터페이스 정도이다)

    SSL은 그럼 어떻게 암호화 하는가?

    SSL의 암호화 방식 = 대칭키(공통키) 암호화 방식 + 공개키 암호화 방식 을 혼합한 하이브리드 암호 시스템을 사용한다.

    처음 클라이언트와 서버가 연결할 때, “대칭키(공개키 == 개인키)”공개키 암호화 방식을 사용해 교환하며 서로의 대칭키를 공유한다.
    이후 서로의 대칭키를 알게 되었다면, 이후부턴 “대칭키”로만 암호화해서 데이터를 주고 받는다.

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

    모든 컴퓨터에는 공개키, 개인키가 있다.
    말 그대로 공개키는 보여지는 것이고 개인키는 나만 알고 있는 것이다.
    하나의 편지를 만약 A사람의 공개키로 암호화 하면 A사람의 개인키로만 열 수 있다.
    대칭키, 공개키 암호화 방식 둘다
    이런 공개키, 개인키를 이용해서 어떻게 암호화 시키고, 누군가에게 받은 문서를 복호화하는 것에 대한 암호화 방식이다.

    1. 대칭키 암호화 방식 (대칭키, 공통키)
      대칭키 암호화 알고리즘

    하나의 키로 암호화, 복호화가 다 가능해서 암호화 키와 복호화 키가 똑같다고 해, 대칭키라고 부른다.

    “암호화 키 == 복호화 키 ⇒ 대칭키”

    대신, 암호화, 복호화 키가 같기 때문에 보안에는 취약하다.
    하지만 서로의 키가 같기 때문에 암호화 속도가 빠르다!

    1. 공개키 암호화 방식 (공개키, 비대칭키)

    클라이언트(송신지)가 서버(목적지)에게 데이터를 요청하고 싶을 때,

    공개키 알고리즘은

    1. 서버 → 클라이언트에게 먼저 자신의 공개키를 보내준다.
    2. 클라이언트는 서버의 공개키로 자기 편지를 암호화 한다. (그럼 서버의 개인키로만 풀 수 있는 편지가 된다.)
    3. 서버는 편지를 자신의 개인키로 풀어서 읽는다.

    이러면 클라이언트는 자기가 보내고 싶은 내용을 서버만 읽을 수 있도록 “안전하게“ 보낼 수 있다.

    하지만 공개키로 암호화를 하고, 개인키로 복호화 해야하기 때문에 위와 같이, 암호화 복호화 과정이 두배로 걸리면서 시간이 오래 걸린다.
    그래서 내용이 길수록 암호화 시간이 오래걸린다.

    SSL의 암호화 방식

    SSL의 암호화 방식 = 대칭키 암호화 방식 + 공개키 암호화 방식 을 혼합한 하이브리드 암호 시스템을 사용한다.

    처음 통신할 클라이언트와 서버가 연결할 때, “대칭키”를 공개키 암호화 방식을 사용해 교환하여 둘만 알고 있는 대칭키를 공유한다.
    이후부턴 이 대칭키로만 암호화 하여 데이터를 주고 받는다.
    (아무도 대칭키를 알지 못하도록 공개키 암호화 방식으로 키를 공유했기 때문에 안전하다.)

    Q: 왜 이런 방식을 택했을까? 처음부터 끝까지 안전한 공개키 암호화 방식으로 했으면 안됐을까?

    위에서 봤듯이, 공개키 암호화 방식은 암호화에 (개인키 ≠ 공개키) 시간이 걸린다.
    문서가 길수록 공개키 == 개인키인 “대칭키”로 문서를 암호 속도가 빨라 편리하다.

    그러므로 대칭키는 소중하기 때문에 공개키 암호화 알고리즘을 통해 암호화 하고 전송하여 서로 나눠갖는 것이다.

    Q: 하지만 대칭키를 전송하기 위해 “공개키”가 떠돌아다니는데,, 이건 안전한걸까?
    이런 공개키가 가로채지지 않도록 안전하게 보내는게 SSL을 이용한 “인증서” 통신이다

    • 서버는 인증 기관(CA)에서 SSL인증서 (서버의 정보 + 서버의 공개키 + 인증기관 서명)를 발급 받는다.
    • 클라이언트가 서버에 연결할 때, 서버는 자신의 인증서를 클라이언트에게 보낸다.
    • 클라이언트는 자신도 발급받은 “인증기관 공개키”로 → 서버의 인증서가 유효한지 확인한다.
    • 서버의 인증서가 유효하다고 확인되면, 그 안에 있는 “서버의 공개키”로 “대칭키”를 암호화해서 서버로 보낸다.

    정리하자면,

    암호화 방식엔 총 2개가 있다.

    • 대칭키(공통키) 암호화 방식
    • 공개키(비대칭키) 암호화 방식
      대칭키 알고리즘  공개키 알고리즘 
    키 종류 공개키 == 개인키 공개키 ≠ 개인키
    암호화 방식 암호화, 복호화에 키가 같음 암호화 - 공개키
    복호화 - 개인키
    암호화 속도 빠름 느림

    HTTPS = HTTP 통신에 SSL 방식으로 처음 통신할 클라이언트 - 서버의 연결을 돕는다.

    SSL인증서 (컴퓨터 정보 + 컴퓨터의 공개키 + 인증기관 서명)로 서로의 신분을 확인한 다음

    서버의 공개키를 이용해 클라이언트가 공유할 “대칭키”를 암호화 시켜 전송한다.

    이후부턴 “대칭키”로만 암호화, 복호화 하며 빠르게 내용을 주고 받는다.

     

    참고자료

    https://raonctf.com/essential/study/web/symmetric_key

    https://brunch.co.kr/@artiveloper/24

    https://rachel-kwak.github.io/2021/03/08/HTTPS.html

    'Computer Science🖥️ > Network' 카테고리의 다른 글

    HTTP의 GET, POST 방식 비교  (2) 2023.08.31
    [용어 개념]스위치, 라우터 차이  (0) 2020.10.18
    TCP/UDP 개념 정리  (0) 2020.09.15
Designed by Tistory.