HTTP와 HTTPS는 무엇이며 그차이는?

HTTP

HTTP(Hyper Transfer Protocol)는 응용프로그램(application) 통신 규약(protocol)이다.

  • World Wide Web을 위한 데이터 통신의 기반이다.
  • Hypertext는 hyperlink를 사용한 구조화된 문서이다. HTTP는 hypertext를 교환하거나 전송하하는 프로토콜이다.

HTTP는 client-server 컴퓨터 모델에서 request-response 프로토콜이 기능하다. 예를 들면 웹 브라우저는 client일 수 있고, 웹사이트를 호스팅하는 컴퓨터에서 작동하는 application은 server일 수 있습니다. client는 HTTP request 메시지를 제출한다. server는 client에게 response 메시지를 리턴한다.

웹 브라우저는 user agent(UA)에 한 예이다.

  • User Agent는 유저 대신 행동하는 소프트웨어이다.
    • 일반적으로 웹 브라우저가 웹 사이트에 브라우저와 운영체제에 대한 정보를 알려주는 것을 말한다. 이를 통해 웹 사이트는 특정 장치의 기능에 맞게 콘텐츠를 지정할 수 있지만, 개인 정보 문제가 제기 된다.
    • User Agent의 또 다른 용도가 있다. 예를 들어 메일 reader는 메일 user agent이다. user agent는 client처럼 행동한다. 특히 HTTP는 client가 사용자에 의해 운영되지 않는 경우에도 user-agent header를 사용하여 요청을 보낸 클라이언트 소프트웨어를 식별한다.

HTTPS

HTTPS는 secure 통신을 위한 프로토콜이다. Transport Layer Security(TLS) 또는 이전의 Secure Sockets Layer(SSL)로 암호화 된 연결 상태에서 HTTP를 통한 통신으로 이루어진다. HTTPS를 사용하는 이유는 방문한 웹 사이트의 인증과 데이터 교환의 프라이버시/무결성 보호를 입증하는 것이다.

일반적인 인터넷 배포 환경에서 HTTPS는 웹 사이트의 인증을 제공하며, 이를 통해 네트워크 기반 공격을 방지할 수 있습니다.

또한, 클라이언트와 서버 통신의 양방향 암호화를 제공하여 통신 내용을 도청 및 위조하거나 변조하는 것을 방지합니다. 실제로 이것은 의사 소통을 의도 한 웹 사이트와 정확히 통신하고, 사용자와 사이트 간의 통신 내용을 다른 사람이 읽거나 위조 할 수 없다는 것을 보장합니다.

역사적으로 HTTPS 연결은 주로 World Wide Web의 전자 상거래, 전자 메일 및 회사 정보 시스템의 민감한 업무에 사용되었습니다. 2000년 후반과 2010년 초반부터 HTTPS는 모든 유형의 웹 사이트에서 계정을 보호하고 사용자 커뮤니케이션, ID 및 웹 브라우징을 비공개로 유지하기 위해 광범위한 페이지를 보호하기 시작했습니다.

SSL/TLS

최초의 SSL은 Netscape사에서 개발되었다. SSL의 목적은 안전하지 않은 전문들을 암호화 하여 안전하게 전달하기 위해서이다. SSL 버전 1은 실제로 발표되진 않았었고, SSL 버전 2가 이후 공개적으로 발표가 되었는데 많은 보안 취약점이 있었다. 그래서 그것을 보안한 것이 SSL 버전 3이며 공식적으로 표준화 한 이름이 TLS 이다. 이를 같이 묶어서 SSL/TLS 라고 부른다.

SSL

  • DES : Data Encryption Standard, 데이터 암호화 표준
  • AES : Advanced Encryption Standard, 고급 암호화 표준

현대는 암호기술이 발달해서 암호문에서 원문을 알아내기 불가능하다. 하지만 비밀키를 전달하는 것이 문제다. 이 문제를 풀어낸 사람이 나타나는데 Rivest, Shamir, Adleman, RSA암호법을 만든다.

RSA 암호법

  1. 수학적인 방법으로 서로 다른 한 쌍의 암호화 키(A-B)를 만든다.
  2. 키 A로 암호화하면 B로만 풀 수 있다.
  3. 키 B로 암호화하면 A로만 풀 수 있다.
  4. 각 키는 매우 큰 숫자이므로 한 개의 키로 다른 키를 알아내기 어렵다.
  5. 키 A만 잘 숨겨 놓으면 된다. 이를 개인키라고 부른다.
  6. 키 B는 아무한테나 알려줘도 된다. 이를 공개키라고 부른다.

암호화 방식은 다음과 같이 진행된다.

  1. 상대방에게 내 공개키를 알려 준다.
  2. 상대방은 나에게 자신의 공개키를 알려준다.
  3. 상대방은 나의 공개키를 이용해 암호화한 문서를 나에게 보낸다.
  4. 나는 내 개인키로 이 함호문을 해독한다.
  5. 내 대답은 상대방의 공개키로 암호화해서 보낸다.
  6. 상대방의 자신의 개인키로 이 글을 해독한다.

이 과정에서 개인키는 전혀 전송되지 않는다. 또한 공개키만으로는 암호문을 해독할 수 없다. 때문에 키 전송 과정에서의 위험을 피할 수 있다.

하지만 공개키 암호화는 너무 복잡해서 시간이 오래 걸린다. 그래서 두 기법의 장점을 모아서 공개키 방법을 대칭키 전달 용도로만 사용하는 방법이 나왔다.

  1. 나는 암호문을 주고 받을 상대에게 접속 요청을 합니다.
  2. 상대는 자신의 공개키를 나에게 보냅니다.
  3. 나는 암호화할 때 사용할 대칭키를 상대의 공개키로 암호화해서 보냅니다.
  4. 상대는 내가 보낸 암호문을 자신의 개인키로 풀어서 대칭키를 알아냅니다.
  5. 이제 대칭키를 사용해 서로 암호문을 주고 받습니다.

공개키 기법으로 대칭키를 주고 받으니 해독키를 들킬 염려가 없고 실제 암호화와 해독 작업은 대칭키로 하니까 비용도 적게 든다. 이게 바로 표준 보안 방식인 SSL이다.

인증기간

접속한 사이트가 진짜인지 확인하기 위해 제 3의 인증기관이 필요하게 됐다.

  1. 인터넷 사이트는 자신의 정보와 공개키를 인증 기관에 제출한다
  2. 인증기간은 검증을 거친 후 (사이트 정보+사이트 공개키)를 인증기관의 개인키로 암호화한다. 이것이 바로 사이트 인증서이다.
  3. 인증기간은 웹 브라우저에게 자신의 공개키를 제공한다.
  4. 사용자가 웹브라우저로 사이트에 접속하면 사이트는 자신의 인증서를 웹 브라우저에게 보낸다.
  5. 웹브라우저는 인증기관의 공개키로 서버 인증서를 해독하여 검증한다.
  6. 이렇게 얻은 사이트 공개키로 대칭키를 대칭키를 암호화해서 보낸다.
  7. 사이트는 자신의 개인키로 암호문을 해독해서 대칭키를 얻는다. 이제 대칭키로 암호문을 주고 받을 수 있다.

결론 : 인증서란 공개키를 담아놓은 파일이다. 용도는 암호문을 주고 받을 대칭키를 전달하는 용도이다.

HTTP vs HTTPS

HTTP HTTPS
평문으로 통신 암호화하여 통신
속도 빠름 속도 느림
- 웹 서버 부하가 생김
웹 페이지를 보는 중 인터넷이 끊겼다 연결되도 페이지를 계속 볼수 있다 인터넷 연결이 끊기면 다시 인증을 해야한다

국내에 공인인증서가 생긴 배경과 그 위험성은?

한국의 공인인증서

공인인증서 : 전자 서명 검증에 필요한 공개키(Public key)에 소유자 정보를 추가하여 만든 일종의 전자 신분증이다. 한국의 공인인증서 및 개인키 역시 파일 양식 자체는 국제표준을 따르고 있지만, 그 파일들이 보관, 저장되는 위치와 방법이 독특하여 웹브라우저로는 사용이 불가능하다. 그 결과, 한국의 공인인증서를 이용하려면 이용자가 추가프로그램을 반드시 설치해야만 한다.

공인인증 기관에 가서 자신의 신분을 증명하면 개인키와 공개키를 받을 수 있다. 이렇게 발급받은 공개키와 개인정보를 묶어 기관의 개인키로 암호화하면 나의 공인인증서가 된다. 공인인증서에 들어 있는 공개키와 짝이 되는 개인키는 컴퓨터에 저장한다. 그런데 한국의 공인인증서 방식에서 사용하는 개인키는 일반 파일형태로 보관하기 때문에 아무나 복사할 수 있다. 사용자들의 공인인증서 비밀번호는 해킹당했던 사이트들을 통해 간단히 얻을 수 있다. 그렇기 때문에 한국식 공인인증서는 보안에 취약하다.

위험성

공개키 기법에서 가장 주의해야 하는 것은 개인키 유출이다. 그런데 한국의 공인인증서 제도는 보안이 뭔지도 모르는 개인사용자에게 키 관리를 맡기는 것이 문제다. 표준 보안방식은 서버에서 안전하게 보관하도록 요구하고 사이트가 책임을 지게한다. 서버는 사용자와 관리자의 권한이 엄격하게 분리되어 있기 때문에 아무나 함부로 개인키에 접근할 수 없다. 만약 사이트 인증서가 유출되면 곧바로 알려지고 이런 인증서는 폐기한다.

웹 사이트는 인증서를 보유하고 웹 브라우저는 인증서를 검증하는 기능을 갖고 있다. 둘이 만나 인증서가 확인되면 곧바로 보안 통신이 시작된다. 인증서와 검증기능은 국제적으로 엄격히 관리되고 있는 인증기관들이 제공한다. 이렇듯 표준보안은 미리 약속되어 있다.

하지만 한국의 보안 방식은 국제 표준을 따르지 않는다. 보안통신을 하려면 따로 프로그램을 설치해야 한다. 이때 중대한 보안문제가 발생한다. 보안을 시작할 때 사용자가 진짜 사이트인지 확인 할 길이 없기 때문이다. 그래서 악의적으로 유사한 웹 사이트를 만들어 정보를 가져갈 수 있게 된다. 또한 프로그램을 설치하는 도중에 가짜 프로그램이 설치되어도 알 수 없게 된다. 그래서 사기당할 위험도 생기고 내 컴퓨에 있는 정보들을 훔쳐가기 쉽다.

SSL과 공인인증서 체계는 동일하다. 서버인증이냐 사용자 인증이냐의 차이이다. 책임을 잘 모르는 사용자들에게 계속 미루다보니 지금과 같이 한국인들의 개인 정보는 값어치도 없어졌다. 책임지고 정부는 이런 위험한 시스템을 끊어내야 한다.