HTTPS가 동작하는 방식
HTTPS와 HTTP
HTTP
- 인터넷 상에서 정보를 주고 받기 위한 프로토콜
- 클라이언트 <-> 서버
- 암호화되지 않은 방법으로 데이터를 전송(악의적 감청, 데이터 변조 가능)
HTTPS
- 보안이 강화된 HTTP
- Hyper Text Transfer Protocol Secure의 약자
- 모든 HTTP 요청과 응답 데이터는 네트워크로 보내지기 전에 암호화된다.
- HTTPS는 HTTP의 하부에 SSL과 같은 보안 계층을 제공함으로써 동작한다
SSL 디지털 인증서
클라이언트와 서버간의 통신을 공인된 제 3자 업체(CA)가 보증해주는 전자화된 문서
SSL과 TLS
SSL(Secure Socket Layer)와 TLS(Transport Layer Security)는 같은 것이라고 볼 수 있다. SSL은 TCP/IP 암호화 통신에 사용되는 규약으로써 넷스케이프에서 만들었으며, SSL 3.0 버전에서부터 IETF에서 표준으로 정해서 TLS 1.0이 되었다. 하지만 보통 SSL로 많이 불려진다.
** IETF(Internet Engineering Task Force): 국제 인터넷 표준화 기구로 인터넷의 운영, 관리 개발에 대해 협의하고 프로토콜과 구조적인 사안들을 분석하는 표준화 작업 기구.
인증서의 장점
- 통신 내용이 노출, 변경되는 것을 방지
- 클라이언트가 접속하려는 서버가 신뢰할 수 있는 서버인지 확인
- SSL 통신에 사용할 공개키를 클라이언트에게 제공
SSL에서 사용하는 암호화의 종류
- 암호: 텍스트를 아무나 읽지 못하도록 인코딩하는 알고리즘
- 키: 암호의 동작을 변경하는 매개변수, 키에 따라서 암호화 결과가 달라지기 때문에 키를 모르면 복호화가 불가능하다.
대칭키 암호화 방식
- 인코딩과 디코딩에 같은 키를 사용하는 알고리즘
- 대칭키를 전달하는 과정에서 키가 유출되면 암호의 내용을 복호화할 수 있기 때문에 위험
- 보통 사용하는 AES가 대칭키 방식의 암호화.
- 단점으로는 발송자와 수신자가 서로 대화하려면 둘 다 공유키를 가져야 한다.
** AES(Advanced Encryption Standard): 고급 암호화 표준이라는 용어로 사용되며 높은 안정성과 속도로 많이 사용됨.
공개키 암호화 방식
- 두개의 키로 암호화와 복호화를 하는 암호화 방식
- A키로 암호화를 하면 B키로 복호화를 할 수 있고, B키로 암호화를 하면 A키로 복호화를 할 수 있다.
- 보통 하나는 자신만 갖고 이를 개인키(private, secret Key)라고 하며, 다른 하나는 상대방에게 공개하며 공개키(public key)라고 얘기한다. 대표적인 공개키(비대칭키)암호화 방식은 RSA.
- 공개키와 개인키의 분리는 메시지의 인코딩은 누구나 할 수 있도록 함과 동시에, 메시지의 디코딩은 개인키를 가지고 있는 사람만 가능하게 한다.
- 단점으로는 처리 알고리즘이 대칭키보다 느리다.
HTTPS 통신에서 실제 전송되는 데이터의 암호화에는 대칭키 암호화 방식을 사용하고, 키 교환에는 공개키(비대칭키) 암호화를 사용하여 처리 속도가 느린 문제를 해결하고 있다.
디지털 서명
해싱, 서명, 검증 세가지 기본 단계로 이루어진다.
- 정보를 해싱한다.
- 정보 해싱은 필수적인 부분은 아니다.
- 해시된 정보에 메시지 발신자의 서명을 작성한다(공개키로 암호화 된다). 이때의 서명에서 개인 키가 포함되지 않는 경우, 메시지 수신자는 유효성을 검증하기 위해 상응하는 공개 키를 사용할 수 없다. 공개키와 개인키는 모두 메시지 발신자에 의해 생성되야하고, 수신자에게는 공개키만 공유된다.
- 메시지 수신자는 발신자가 제공한 공개키를 통해 디지털 서명의 유효성을 확인할 수 있다. 이는 발신자만이 공개키에 상응하는 개인키를 가지고 있기 때문이다.
** 디지털 서명이 중요한 이유
- 데이터 무결성: 수신자는 발신자의 메시지가 전송되는 과정에서 변경되지 않았음을 검증할 수 있다. 메시지가 수정되면 전혀 다른 서명이 생성되기 때문.
- 진위성: 발신자의 개인 키가 안전하게 보관되는 한, 수신자는 해당 디지털 서명이 다른 이가 아닌 발신자에 의해 생성됐음을 확신할 수 있다.
- 부인방지: 발신자의 개인키가 노출되지 않는 이상, 발신자는 서명 사실을 부정할 수 없다.
인증기간(CA)
HTTPS 통신은 제3자 인증을 사용한다. 인증기관으로부터 공인인증서를 발급받아서 서버에 설치해야 경고 없이 HTTPS 통신이 가능하다. 인증기관의 인증을 받았다는 것은 웹서비스를 제공하는 소유자를 보증해준다는 의미다. 자세히는 웹 서비스 제공자의 공개키가 소유자의 것이라는 것을 보증해주는 말과 같다.
- HTTPS로 웹서비스를 제공하려는 사람이 자신의 공개키와 개인키를 생성(공개키와 개인키를 생성하는 작업은 보통 CA에서 대신 생성해주기도 한다.)
- 공개키를 인증기관에 송부
- 인증기관은 보내온 공개키, 유효기관, 도메인 등의 정보를 포함하여 인증기관의 개인키로 전자서명한 인증서를 발급
- 웹 서비스를 제공하려는 사람은 발급 받은 인증서와 자신의 캐인키를 웹 서버에 설정하여 HTTPS 통신을 할 수 있게 한다.
웹 브라우저에는 이미 여러 인증기관의 공개키를 포함한 인증서가 설치되어 있다. 그래서 웹서버와 통신 시 인증기관의 개인키로 서명된 인증서를 받았을 때 이미 설치되어 있는 인증기관의 공개키로 복호화가 가능한것.
개발 목적이나 내부에서 사용할 목적으로 사설 인증서를 만들 경우 웹 브라우저에 인증서를 수동으로 설치해야만 경고 없이 통신이 계속 가능하다.
SSL 동작 방식
컴퓨터와 컴퓨터가 그 사이의 네트워크로 통신을 하기 위해서는
핸드쉐이크 -> 세션 -> 세션종료
의 과정을 거친다.
암호화된 HTTP(HTTPS)메세지를 교환하기 전에 클라이언트와 서버는 SSL 핸드쉐이크를 진행한다.
- 브라우저가 도메인에 접속하면, 웹 서버는 CA에서 발급받은 인증서를 웹 브라우저에 보낸다.
- 이 인증서에는 CA의 개인키로 암호화된 사이트의 정보와 공개키가 들어있다.
- 웹 브라우저는 이미 가지고 있는 인증기관의 공개키로 웹 서버에서 받은 인증서를 복호화해서 확인한다.
- 웹 브라우저는 실제 데이터의 암호화에 사용될 대칭키를 생성하고, 인증서에서 꺼낸 웹 서버 측의 공개키로 암호화하여 웹 서버로 보낸다.
- 웹 서버는 브라우저에서 보내온 암호화된 대칭키를 개인키로 복호화하여 확인한다.
- 웹 서버는 복호화한 대칭키를 통하여 데이터를 암호화하여 주고 받는다.
공개키 암호 방식은 알고리즘 계산 방식이 느린 경향이 있으므로 위처럼 공개키와 대칭키방식을 혼합하여 사용한다.
- 안전한 의사소통 채널을 수립할 때는 공개키 암호화 방식을 사용
- 위를 통해 수립된 대화채널에서는 조금 더 빠른 소통을 위해 무작위 대칭키를 생성하여 전반적으로 빠른 대칭키 암호화 방식을 통한 소통을 이룬다.
- 실제 데이터 암호화 방식: 대칭키
-
상기 대칭키를 서로 공유하기 위한 암호화 방식: 공개키
참조: SSL 동작 방식을 간단히 알아보기 https://offbyone.tistory.com/274 HTTPS와 SSL 인증서, SSL 동작방법 · 초보몽키의 개발공부로그 https://wayhome25.github.io/cs/2018/03/11/ssl-https/ 국제 인터넷 표준화 기구 - 위키백과, 우리 모두의 백과사전 https://ko.wikipedia.org/wiki/%EA%B5%AD%EC%A0%9C_%EC%9D%B8%ED%84%B0%EB%84%B7_%ED%91%9C%EC%A4%80%ED%99%94_%EA%B8%B0%EA%B5%AC AES - 나무위키 https://namu.wiki/w/AES#s-5 디지털 서명이란 무엇인가요? | Binance Academy https://www.binance.vision/ko/blockchain/what-is-a-digital-signature