-
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사람의 개인키로만 열 수 있다.
대칭키, 공개키 암호화 방식 둘다
이런 공개키, 개인키를 이용해서 어떻게 암호화 시키고, 누군가에게 받은 문서를 복호화하는 것에 대한 암호화 방식이다.- 대칭키 암호화 방식 (대칭키, 공통키)
대칭키 암호화 알고리즘
하나의 키로 암호화, 복호화가 다 가능해서 암호화 키와 복호화 키가 똑같다고 해, 대칭키라고 부른다.
“암호화 키 == 복호화 키 ⇒ 대칭키”
대신, 암호화, 복호화 키가 같기 때문에 보안에는 취약하다.
하지만 서로의 키가 같기 때문에 암호화 속도가 빠르다!- 공개키 암호화 방식 (공개키, 비대칭키)
클라이언트(송신지)가 서버(목적지)에게 데이터를 요청하고 싶을 때,
공개키 알고리즘은
- 서버 → 클라이언트에게 먼저 자신의 공개키를 보내준다.
- 클라이언트는 서버의 공개키로 자기 편지를 암호화 한다. (그럼 서버의 개인키로만 풀 수 있는 편지가 된다.)
- 서버는 편지를 자신의 개인키로 풀어서 읽는다.
이러면 클라이언트는 자기가 보내고 싶은 내용을 서버만 읽을 수 있도록 “안전하게“ 보낼 수 있다.
하지만 공개키로 암호화를 하고, 개인키로 복호화 해야하기 때문에 위와 같이, 암호화 복호화 과정이 두배로 걸리면서 시간이 오래 걸린다.
그래서 내용이 길수록 암호화 시간이 오래걸린다.SSL의 암호화 방식
SSL의 암호화 방식 = 대칭키 암호화 방식 + 공개키 암호화 방식 을 혼합한 하이브리드 암호 시스템을 사용한다.
처음 통신할 클라이언트와 서버가 연결할 때, “대칭키”를 공개키 암호화 방식을 사용해 교환하여 둘만 알고 있는 대칭키를 공유한다.
이후부턴 이 대칭키로만 암호화 하여 데이터를 주고 받는다.
(아무도 대칭키를 알지 못하도록 공개키 암호화 방식으로 키를 공유했기 때문에 안전하다.)Q: 왜 이런 방식을 택했을까? 처음부터 끝까지 안전한 공개키 암호화 방식으로 했으면 안됐을까?
위에서 봤듯이, 공개키 암호화 방식은 암호화에 (개인키 ≠ 공개키) 시간이 걸린다.
문서가 길수록 공개키 == 개인키인 “대칭키”로 문서를 암호 속도가 빨라 편리하다.그러므로 대칭키는 소중하기 때문에 공개키 암호화 알고리즘을 통해 암호화 하고 전송하여 서로 나눠갖는 것이다.
Q: 하지만 대칭키를 전송하기 위해 “공개키”가 떠돌아다니는데,, 이건 안전한걸까?
이런 공개키가 가로채지지 않도록 안전하게 보내는게 SSL을 이용한 “인증서” 통신이다- 서버는 인증 기관(CA)에서 SSL인증서 (서버의 정보 + 서버의 공개키 + 인증기관 서명)를 발급 받는다.
- 클라이언트가 서버에 연결할 때, 서버는 자신의 인증서를 클라이언트에게 보낸다.
- 클라이언트는 자신도 발급받은 “인증기관 공개키”로 → 서버의 인증서가 유효한지 확인한다.
- 서버의 인증서가 유효하다고 확인되면, 그 안에 있는 “서버의 공개키”로 “대칭키”를 암호화해서 서버로 보낸다.
정리하자면,
암호화 방식엔 총 2개가 있다.
- 대칭키(공통키) 암호화 방식
- 공개키(비대칭키) 암호화 방식
대칭키 알고리즘 공개키 알고리즘 키 종류 공개키 == 개인키 공개키 ≠ 개인키 암호화 방식 암호화, 복호화에 키가 같음 암호화 - 공개키
복호화 - 개인키암호화 속도 빠름 느림 HTTPS = HTTP 통신에 SSL 방식으로 처음 통신할 클라이언트 - 서버의 연결을 돕는다.
SSL인증서 (컴퓨터 정보 + 컴퓨터의 공개키 + 인증기관 서명)로 서로의 신분을 확인한 다음
서버의 공개키를 이용해 클라이언트가 공유할 “대칭키”를 암호화 시켜 전송한다.
이후부턴 “대칭키”로만 암호화, 복호화 하며 빠르게 내용을 주고 받는다.
참고자료
https://raonctf.com/essential/study/web/symmetric_key
'Computer Science🖥️ > Network' 카테고리의 다른 글
HTTP의 GET, POST 방식 비교 (2) 2023.08.31 [용어 개념]스위치, 라우터 차이 (0) 2020.10.18 TCP/UDP 개념 정리 (0) 2020.09.15 - 대칭키 암호화 방식 (대칭키, 공통키)