HTTPS
HTTP의 약점
- 평문 통신이기 때문에 도청 가능
- 통신 상대를 확인하지 않기 때문에 위장 가능
- 완전성을 증명할 수 없기 때문에 변조 가능
평문 통신이기 때문에 도청 가능 - 암호화로 도청을 피한다
- 통신 암호화
- SSL이나 TLS 같은 다른 프로토콜을 조합함으로써 HTTP의 통신 내용을 암호화 할 수 있다.
- SSL 등을 이용해 안전한 통신로를 확립하고 나서 그 통신로를 사용해서 HTTP 통신을 하는 것을 HTTPS 또는 HTTP over SSL이라고 한다.
- 컨텐츠 암호화
- 통신 자체를 암호화하지는 않고 HTTP 메시지 바디를 암호화 한다.
- 그러나 클라이언트와 서버가 컨텐츠의 암호화나 복호화 구조를 가지고 있어야 하므로 평상시 유저가 사용하는 브라우저와 웹 서버에서는 사용하기 어렵다.
통신 상대를 확인하지 않기 때문에 위장 가능 - 상대를 확인하는 증명서
HTTP는 통신 상대를 확인할 수 없지만, SSL로 상대를 확인할 수 있다. SSL은 암호화 뿐만 아니라 상대를 확인 할 수 있도록 증명서를 제공한다. 이 증명서를 이용함으로써, 통신 상대가 내가 통신하고자 하는 서버임을 나타내고 이용자는 개인 정보 누설 등의 위험성이 줄어든다. 클라이언트가 증명서를 가짐으로써 본인 확인을 하고, 웹 사이트 인증에서 이용할 수도 있다.
완전성을 증명할 수 없기 때문에 변조 가능
서버와 클라이언트 사이에 공격자가 리퀘스트나 리스폰스를 빼앗아 변조하는 공격(중간자 공격: Man-in-the-Middle)이 있을 수 있다. HTTP를 사용해서 완전성을 확인하기 위한 방법은 있지만, 확실하면서 편리한 방법은 현재 없다. 자주 사용되고 있는 방법은 MD5나 SHA-1 등의 해시 값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이 있다.
그러나 이것도 불완전한 것이, MD5나 SHA-1 해시값들도 적절하게 수정해버린다면 이 또한 변조 가능성이 남아있다. 따라서 HTTPS를 통해 이를 방지해야 한다.
HTTPS
HTTP + 통신의 암호화 + 증명서 + 완전성 보호 = HTTPS (HTTP Secure)
SSL에서는 공개키 암호화 방식을 채용하고 있다. 간단하게 설명하면 암호화에 두 개의 키를 사용한다.
각 유저가 비밀키와 공개키를 하나씩 가지고 있고, 송신하는 측은 수신하는 측의 공개키를 사용해서 암호화 하고 보낸다. 그러면 수신측에서는 자신의 비밀키를 사용해서 복호화 한다.
이 경우엔 비밀키를 통신에 보낼 필요 자체가 없기 때문에 비밀키 노출을 걱정할 필요가 없다. - 공개키를 이용해 암호화 한 것을 복호화 하는 것은 소인수 분해 문제의 해결 방법을 알아내는 것
HTTPS는 공통키 암호와 공개키 암호의 양쪽 성질을 가진 하이브리드 암호 시스템이다. (공개키 암호는 공통키 암호보다 처리가 느리기 때문에..)
그래서 공통키 암호로 사용하는 키를 공개키 암호를 사용해서 안전하게 교환하고, 그 이후 통신에서는 공통키 암호로 통신을 한다.
그러나 공통키가 중간에 바꿔치기 당했는지는 어떻게 증명 할까? -> 이를 위해서 인증 기관(CA: Certificate Authority)과 공개키 증명서가 이용되고 있다. 유명한 인증기관에는 VeriSign이 있다.
인증 기관은 다음과 같이 이용된다.
- 서버의 운영자가 인증 기관에 공개키를 제출
- 인증 기관은 제출된 공개키에 디지털 서명을 하고 서명이 끝난 공개키를 만든다.
- 공개키 인증서에 서명이 끝난 공개키를 담는다.
- 서버는 이 공개키 인증서를 클라이언트에 보내고 공개키 암호로 통신을 한다.
- 공개키 인증서를 받은 클라이언트는 증명 기관의 공개키를 사용해서 서버의 공개키를 인증한 것이 CA라는 것과 서버의 공개키가 신뢰할 수 있다는 것을 알 수 있다.
SSL은 느리다
- 통신속도가 떨어진다.
- CPU나 메모리 등의 리소스를 다량으로 소비함으로써 처리가 느려진다.
HTTP를 사용하는 경우에 비해 2배에서 100배 정도 느려질 수 있다. 또 SSL은 반드시 암호화 처리를 하고 있기 때문에 서버나 클라이언트에서 암호화나 복호화를 위한 계산을 할 필요가 있다. 따라서 서버나 클라이언트의 리소스를 소비하게 되어 HTTP에 비해 부담이 커진다…
댓글남기기