HTTPS
HTTPS는 인터넷을 통해 정보를 안전하게 전송하기 위한 통신 프로토콜입니다.
HTTP의 보안 버전으로 웹 브라우징 및 데이터 전송 과정에서 데이터 기밀성과 무결성을 보장하는 프로토콜입니다.
전송 과정에서 무결성 검사 기술을 사용하여 데이터가 변조되었는지 확인하고 변경된 데이터를 자동으로 거부합니다.
즉 HTTPS는 클라이언트가 웹 사이트와 통신할 때 민감한 데이터를 전송하는 경우 해당 데이터가 중간에서 수정되거나 탈취되지 않도록 보장합니다.
HTTP는 평문을 이용하여 웹 통신을 진행합니다.
암호화 되지 않은 데이터는 스누핑(Snooping), 스니핑(Sniffing)의 위협에 노출될 수 있으며 이를 방지하기 위해 상호간 적당한 사용자인지 인증서를 통해 검증하고 서로 약속한 암호화 알고리즘을 통해 키를 교환한 후 암호화 통신을 진행합니다.
이를 위해 HTTPS를 사용하며 HTTPS는 웹 통신을 암호화 하기 위해 SSL/TLS 프로토콜을 사용하여 데이터를 암호화하고 신원을 확인합니다.
SSL/TLS는 HTTPS에서 사용되는 표준 프로토콜이며 SSL(Secure Socket Layer)의 최신 버전을 TLS(Transport Layer Security)로 부르지만 본질적으로 두 프로토콜은 동일합니다.
SSL/TLS는 공개 키와 개인 키가 있는 비대칭 키 암호화라는 기술을 사용합니다.
공개 키와 개인 키로 이루어진 키 쌍이며 데이터를 암호화하는 공개 키는 공개적으로 공유되고 데이터를 복호화하는 개인 키는 비밀로 유지됩니다.
누구나 데이터를 암호화할 수 있지만 해당 데이터를 해독할 수 있는 사람은 개인 키를 소유한 당사자 또는 기관뿐입니다.
때문에 개인 키는 안전한 저장소에 보관되어야 하며 이를 통해 데이터의 기밀성 및 무결성을 동시에 보호할 수 있습니다.
공개 키는 서버의 웹사이트의 공개 키 정보가 있는 SSL 인증서를 통해 클라이언트 장치와 공유되며 인증서는 CA(Certificate Authority)에 의해 암호화되어 서명되며 각 브라우저에는 암시적으로 신뢰하는 CA 목록이 있습니다.
암호화
기본적으로 데이터를 암호화하기 위해서는 세 가지가 필요합니다.
- 암호화 대상 데이터
- 고유한 암호화 키
- 암호화 알고리즘
데이터를 암호하고 보호하기 위해 암호화 대상 데이터, 고유한 암호화 키, 그리고 암호화 알고리즘 이 세 가지의 요소를 조합합니다.
다음은 위 세 가지 요소를 조합하여 암호화하는 대칭 암호화와 비대칭 암호화에 대해 알아보겠습니다.
대칭 암호화
먼저 대칭 암호화는 암호화 및 복호화에 동일한 암호 키를 사용하는 암호화 방법입니다.
송신자는 데이터를 암호화하려고 할 때 암호 키를 사용합니다. 이 암호 키를 통해 데이터를 평문에서 암호문으로 변환합니다.
그 후 암호화된 데이터(암호문)는 수신자에게 전송되고 수신자는 송신자가 사용한 암호 키를 통해 복호화하며 평문으로 복구합니다.
대칭 암호화는 계산적으로 간단하며 빠르기 때문에 대량의 데이터를 신속하게 효율적으로 암호화하고 복호화할 수 있지만 대칭 암호화 자체는 연결의 반대쪽 끝을 제어할 수 없다는 치명적인 단점이 있습니다.
해당 문제를 해결하기 위해 비대칭 암호화 기술이 등장합니다.
비대칭 암호화
비대칭 암호화는 두 개의 별도 키로 동일한 데이터를 암호화하고 복호화합니다.
공개 키와 개인 키로 이루어진 키 쌍이며 데이터를 암호화하는 공개 키는 공개적으로 공유되고 데이터를 복호화하는 개인 키는 비밀로 유지됩니다.
누구나 데이터를 암호화할 수 있지만 해당 데이터를 해독할 수 있는 사람은 개인 키를 소유한 당사자 또는 기관뿐입니다.
즉 공개 키는 데이터 암호화에 사용되며 개인 키로만 해독할 수 있습니다.
송신자는 수신자의 공개 키를 사용하여 데이터를 암호화합니다.
암호화된 데이터는 수신자에게 전송되고 수신자는 개인 키를 사용하여 암호문을 평문으로 복호화합니다.
HTTPS 작동 방식
- 먼저 클라이언트는 웹 사이트 서버에 접속하여 연결을 요청합니다.
- 클라이언트가 서버에게 연결을 요청하면 서버는 클라이언트에게 서버에 대칭키를 보내줍니다.
- 브라우저는 세션 키라는 세 번째 키를 생성합니다.
- 세션 키는 서버에서 얻은 공개 키를 사용하여 컴퓨터에서 암호화됩니다.
- 그 후 암호화된 세션 키가 서버와 공유됩니다.
- 서버는 비밀 개인 키를 사용하여 클라이언트로부터 받은 세션 키를 해독합니다. 이제 양쪽 끝에 컴퓨터가 생성한 세션 키가 있습니다.
- 공개키 암호화는 종료되고 대칭암호로 대체됩니다.
- 이제 대칭 암호화만 사용하여 서버 세션에 있으며 웹 사이트를 떠날 때까지 이러한 상태가 유지됩니다.
공개 키(비대칭) 암호화는 나머지 연결에 사용되는 세 번째 키를 교환하기 위해 처음에만 간략하게 사용됩니다.
이렇게 handshaking이 종료되며 브라우저와 서버가 같은 키를 가지고 있으므로 더이상 비대칭키(공개 키)로 암호화를 할 필요 없이 세션 키를 통해 대칭 키 방식으로 동작하게 됩니다.
즉 HTTPS는 handshaking 과정에서 비대칭 키를 사용해 인증서(대칭 키)를 보내고 해당 인증서의 대칭 키를 안전하게 받았다면 연결 이후에는 해당 대칭 키(세션 키)를 사용해서 데이터를 암호화하고 해독합니다.
오탈자 및 오류 내용을 댓글 또는 메일로 알려주시면, 검토 후 조치하겠습니다.
'Web' 카테고리의 다른 글
[Web] 로드밸런서(Load Balancer) (0) | 2023.08.31 |
---|---|
[Web] HTTP(Hyper Text Transfer Protocol) (0) | 2023.08.24 |
[Web] REST (0) | 2023.08.09 |
[Web] JWT & Session & Cookie (0) | 2023.07.15 |