개요
대칭/비대칭 암호화 과정과 이를 활용한 HTTPS 통신 과정에 대해 알아보려고 한다.
대칭키
대칭키 방식은 하나의 키(대칭키)를 가지고 있다면, 누구나 해당 키를 이용하여 데이터를 암호화하고, 복호화할 수 있는 암호화 방식을 말한다. 대칭키는 하나의 키만 있으면 되기 때문에 심플하고 컴퓨터의 입장에서도 연산과정이 상대적으로 훨씬 가볍다는 장점이 있다. 그러나 대칭키 방식은 키를 전달하는 과정에서 키가 탈취된다면 전혀 의미가 없어지는 암호화 방식이라는 단점이 존재한다.
비대칭키(공개키)
비대칭키 방식은 두개의 키를 이용하여 암호화하는 방식이다. 한쪽 키로 암호화한다면, 다른 한쪽 키로만 복호화할 수 있다. 여기서 암호화하는 키를 공개키라고 부르고 복호화하는 키를 개인키라고 부른다. 비대칭키는 대칭키보다 안전하지만, 연산 과정이 대칭키에 비해 훨씬 무겁다는 단점또한 가지고 있다.
HTTPS 통신
HTTPS는 HTTP에 Secure를 더해서 HTTPS이다. 기존 HTTP를 사용하던 때에는 제3자가 패킷을 갈취해서 데이터를 얻는 것이 가능했다. 그래서 사용자가 로그인할때 ID와 비밀번호를 중간에 가로채거나, 페이지를 요청하면 다른 페이지로 유도하는 해킹 수법이 쓰였다고 한다. 이를 보완하기 위해 나온 것이 HTTPS 통신이다.
HTTPS 통신은 SSL(Secure Sockets Layer) 인증서를 통해서 데이터의 신뢰성을 보장한다. 상단에 설명한 것처럼 대칭키와 비대칭키 모두 장/단점을 가지고 있기 때문에 HTTPS 통신에서는 이 둘을 혼합해서 사용한다.
먼저 서버에서 SSL 인증서를 생성하는 과정에 대해서 알아본다.
서버에서는 자신의 페이지 정보와 필요한 정보들과 함께 자신의 공개키를 포함하여 인증된 기관(CA)에 전달한다. CA에서는 이 정보들을 바탕으로 CA의 개인키를 통해 암호화한다. 그리고 CA의 공개키는 브라우저에 이미 내장되어 있다.
(주황색 키는 브라우저에 내장된 CA의 공개키)
이제 클라이언트에서 서버에 어떠한 데이터를 요청하기 위해서 먼저 요청을 보낸다. 그러면 서버에서는 자신의 SSL 인증서를 넘긴다.
클라이언트에서는 해당 인증서를 자신의 브라우저가 가지고 있는 CA의 공개키를 통해 복호화한다. 만약 맞는 키가 없다면 해당 인증서는 유효하지 않은 것이다. 성공적으로 인증서를 복호화했다면 해당 인증서에는 페이지의 정보와 해당 페이지의 공개키가 있다. 그 공개키는 유효한 인증서를 통해 얻은 공개키이기 때문에 해당 페이지를 신뢰할수 있는 것이다.
이제 서로 비대칭키 방식으로 계속 통신하면 좋겠지만, 아쉽게도 비대칭키는 연산이 무겁다. 따라서 클라이언트에서는 하나의 대칭키를 만들고(정확히는 Handshaking 과정에서 서로 랜덤한 문자열을 주고받은 뒤, 임시키를 만들어서 임시키를 대칭키로 바꾸는 작업이 필요하다), 방금의 인증 과정을 통해 얻은 신뢰할 수 있는 페이지의 공개키를 통해 암호화 한뒤 서버에게 보낸다. 대칭키의 전송 과정을 암호화했기 때문에 대칭키의 단점인 키 전송에서의 문제를 해결한 것이다.
그 이후로는 대칭키 방식을 통해서 데이터를 통신한다.
HTTPS의 통신 방식을 겉핥기 수준으로 알아보았다. 완벽한 보안은 존재하지 않기때문에 HTTPS로 모든 문제를 해결할 수는 없지만, 최소한의 보안을 만족하기 위해서라도 요즈음 나오는 웹 페이지는 SSL 인증서를 도입하여 HTTPS 통신을 하는것은 필수요건이 되었다.
'Study > OS & Network' 카테고리의 다른 글
[OS] 뮤텍스와 세마포어 (0) | 2021.12.23 |
---|---|
[Network] TCP/IP와 Handshaking (0) | 2021.12.14 |
[OS] (멀티)프로세스와 (멀티)스레드, 그리고 동시성 (0) | 2021.12.10 |
[Network] OSI 7계층 (0) | 2021.12.08 |
댓글