HTTPS 란?

HTTPS(Hypertext Transfer Protocol Secure)는 HTTP에 보안 기능을 추가한 프로토콜로, 웹에서 데이터를 안전하게 주고받기 위해 사용됩니다. HTTPS는 HTTP의 모든 기능을 제공하면서, 추가적으로 데이터의 암호화, 인증, 무결성 보장을 통해 통신의 보안을 강화합니다.
HTTPS는 웹 통신의 보안을 강화하는 중요한 프로토콜로, 오늘날 대부분의 웹사이트에서 기본적으로 사용되고 있습니다. HTTP에 비해 약간의 추가 비용과 복잡성이 있지만, 보안성과 신뢰성을 크게 향상시키기 때문에 사용자의 개인 정보 보호와 데이터 무결성을 보장하기 위해 필수적인 기술입니다.



HTTPS의 주요 구성 요소

암호화:

HTTPS는 데이터를 전송하기 전에 암호화하여, 제3자가 통신 내용을 엿볼 수 없도록 합니다. 이를 통해 웹 브라우저와 웹 서버 간의 통신 내용이 안전하게 보호됩니다.
HTTPS는 주로 TLS(Transport Layer Security) 프로토콜을 사용하여 암호화합니다. TLS는 이전의 SSL(Secure Sockets Layer) 프로토콜의 후속 버전으로, 대부분의 HTTPS 연결에서 사용됩니다.

인증:

HTTPS는 클라이언트가 통신하려는 서버가 신뢰할 수 있는 서버인지 확인할 수 있도록 디지털 인증서를 사용합니다.
서버는 인증 기관(CA: Certificate Authority)에서 발급받은 디지털 인증서를 클라이언트에게 제공하며, 클라이언트는 이 인증서를 통해 서버의 신뢰성을 확인합니다.

데이터 무결성:

HTTPS는 전송 중인 데이터가 손상되거나 변조되지 않도록 보호합니다. 이를 통해 클라이언트와 서버 간에 주고받는 데이터가 전송 도중 변경되지 않았음을 보장할 수 있습니다.



HTTPS의 장단점

HTTPS의 장점

  • 보안성 강화:
    데이터를 암호화함으로써 도청, 중간자 공격, 데이터 유출 등을 방지할 수 있습니다.
    서버 인증을 통해 피싱 사이트와 같은 가짜 웹사이트에 접속하는 것을 예방할 수 있습니다.
  • 신뢰성 향상:
    HTTPS를 사용하는 웹사이트는 사용자에게 더 높은 신뢰성을 제공합니다. 브라우저는 HTTPS 웹사이트를 안전하다고 표시하고, HTTP 웹사이트는 "안전하지 않음"으로 경고할 수 있습니다.
  • SEO(검색 엔진 최적화) 우대:
    구글과 같은 검색 엔진은 HTTPS를 사용하는 웹사이트를 우대하며, 검색 결과에서 HTTPS 사이트에 가산점을 부여할 수 있습니다.

HTTPS의 단점

  • 성능 저하:
    데이터 암호화와 복호화 과정이 추가되므로, HTTP보다 약간의 성능 저하가 발생할 수 있습니다. 다만, 현대의 서버와 네트워크 환경에서는 이 성능 저하가 거의 느껴지지 않을 정도로 미미합니다.
  • 복잡한 인증서 관리:
    서버 측에서 디지털 인증서를 발급받고 관리하는 과정이 필요하며, 인증서를 갱신하거나 문제가 생겼을 때 이를 해결해야 합니다.







SSL/TLS 란?

SSL(Secure Sockets Layer)와 TLS(Transport Layer Security)는 인터넷 통신의 보안을 강화하기 위해 설계된 암호화 프로토콜입니다. 이 프로토콜들은 클라이언트(예: 웹 브라우저)와 서버 간에 주고받는 데이터를 암호화하여 전송하는 역할을 합니다. SSL은 초기 버전이며, TLS는 SSL의 발전된 버전으로 현재 널리 사용되고 있습니다.



SSL과 TLS의 개요

SSL:

1990년대 중반에 넷스케이프(Netscape)에 의해 개발된 보안 프로토콜입니다. 인터넷을 통해 전송되는 데이터를 암호화하여 보호합니다. SSL은 1.0 버전부터 시작하여 2.0, 3.0 버전으로 발전했지만, 보안상의 취약점이 발견되면서 더 이상 사용되지 않습니다.

TLS:

SSL 3.0의 후속으로, 1999년에 최초로 도입되었습니다. SSL의 취약점을 보완하고, 더 강력한 암호화 알고리즘을 사용하여 보안을 강화했습니다. 현재 대부분의 보안 통신은 TLS 프로토콜을 기반으로 이루어지며, 최신 버전은 TLS 1.3입니다.



SSL/TLS의 주요 기능

  • 암호화:
    SSL/TLS는 데이터가 전송되는 동안 제3자가 내용을 엿볼 수 없도록 데이터를 암호화합니다. 이로써, 민감한 정보가 인터넷을 통해 안전하게 전달될 수 있습니다.
  • 인증:
    클라이언트와 서버는 SSL/TLS를 통해 서로의 신원을 확인할 수 있습니다. 이를 위해 서버는 디지털 인증서를 사용하여 자신이 신뢰할 수 있는 서버임을 증명합니다.
  • 데이터 무결성:
    SSL/TLS는 전송된 데이터가 중간에 변조되거나 손상되지 않았음을 보장합니다. 이를 위해 메시지 인증 코드(MAC)를 사용하여 데이터의 무결성을 확인합니다.



SSL/TLS 핸드셰이크(Handshake)

HTTPS 암호화 과정에서 가장 중요한 단계는 SSL/TLS 핸드셰이크(Handshake)입니다. 이 과정은 클라이언트(예: 웹 브라우저)와 서버가 안전하게 통신할 수 있도록 암호화 세션을 설정하는 절차를 의미합니다. 핸드셰이크 과정에서 양측은 통신에 사용할 암호화 방법을 협상하고, 세션 키를 교환하여 이후의 데이터 전송을 암호화합니다.



SSL/TLS 핸드셰이크 과정

1. 클라이언트 헬로우(Client Hello):

클라이언트는 서버에 연결을 시도하면서 첫 메시지인 Client Hello를 보냅니다.
이 메시지에는 클라이언트가 지원하는 암호화 알고리즘 목록, 사용할 수 있는 TLS 버전, 랜덤 값(세션 키 생성에 사용), 그리고 세션 ID(재사용 가능한 세션의 경우) 등이 포함됩니다.

2. 서버 헬로우(Server Hello):

서버는 클라이언트의 요청을 수신한 후, Server Hello 메시지로 응답합니다.
이 메시지에는 서버가 선택한 암호화 알고리즘, TLS 버전, 서버의 랜덤 값, 세션 ID 등이 포함됩니다.
서버는 자신이 신뢰할 수 있는 서버임을 증명하기 위해 디지털 인증서(서버 인증서)를 클라이언트에게 전송합니다. 이 인증서에는 서버의 공개 키가 포함되어 있습니다.

서버 키 교환(Server Key Exchange) (선택적):
만약 서버가 추가적인 키 교환 정보를 제공해야 하는 경우(예: Diffie-Hellman 키 교환), 이 단계에서 키 교환 메시지를 보냅니다.

클라이언트 인증(Client Authentication) (선택적):
일부 상황에서는 서버가 클라이언트의 신원을 확인하기 위해 클라이언트 인증서를 요구할 수 있습니다. 이 경우 클라이언트는 자신의 인증서를 서버에 보냅니다.

3. 프리마스터 시크릿(Pre-Master Secret) 생성:

클라이언트는 서버의 공개 키를 사용하여 프리마스터 시크릿이라는 임시 암호화를 위한 비밀 값을 생성합니다.
이 프리마스터 시크릿은 클라이언트에 의해 서버의 공개 키로 암호화되어 서버로 전송됩니다.

4. 세션 키 생성:

서버는 자신의 개인 키를 사용해 클라이언트가 전송한 프리마스터 시크릿을 복호화합니다.
클라이언트와 서버는 프리마스터 시크릿과 서로의 랜덤 값을 조합하여 세션 키를 생성합니다. 이 세션 키는 이후의 모든 통신을 암호화하는 데 사용됩니다.

5. 클라이언트 레디(Client Finished):

클라이언트는 이제 세션 키를 사용해 Finished 메시지를 암호화하여 서버에 보냅니다. 이 메시지는 클라이언트가 핸드셰이크를 완료했음을 알립니다.
이 메시지를 통해 핸드셰이크 과정에서 전송된 모든 데이터가 무결성을 가지고 있는지 확인합니다.

6. 서버 레디(Server Finished):

서버도 세션 키를 사용해 암호화된 Finished 메시지를 클라이언트에 보냅니다. 서버가 핸드셰이크를 완료했음을 알리는 이 메시지도 클라이언트와 동일하게 무결성을 확인합니다.

핸드셰이크 완료 후

핸드셰이크 과정이 완료되면 클라이언트와 서버는 동일한 세션 키를 공유하게 되며, 이후의 모든 통신은 이 세션 키를 사용한 대칭 암호화 방식으로 암호화됩니다. 이 대칭 암호화는 비대칭 암호화보다 훨씬 빠르고 효율적입니다.







대칭키 암호화 방식 vs 비대칭키(공개키) 암호화 방식

대칭키 암호화 방식

대칭키 암호화 방식(Symmetric Key Encryption)은 하나의 키를 사용하여 데이터를 암호화하고 복호화하는 암호화 방식입니다. 이 방식에서, 동일한 키가 암호화와 복호화 양쪽에 사용되기 때문에 "대칭"이라는 이름이 붙었습니다. 대칭키 암호화는 데이터의 기밀성을 보호하는 데 널리 사용되며, 효율적이고 빠르다는 장점이 있습니다.
대칭키 암호화는 하나의 키를 사용하여 데이터를 암호화하고 복호화하는 방식으로, 속도와 효율성에서 큰 이점을 가지고 있습니다. 하지만 키 분배 문제로 인해, 대칭키 암호화는 주로 소규모 환경이나 대칭키와 비대칭키를 결합한 혼합 방식(예: HTTPS에서의 SSL/TLS)에 사용됩니다.



대칭키 암호화의 작동 방식

  • 키 생성:
    하나의 비밀 키(대칭키)를 생성합니다. 이 키는 매우 중요한 정보로, 데이터를 암호화하고 복호화하는 데 사용됩니다.
  • 암호화(Encryption):
    평문(Plaintext, 즉 원본 데이터)을 대칭키를 사용하여 암호화 알고리즘에 넣어 암호화된 데이터(암호문, Ciphertext)를 생성합니다.
    암호화된 데이터는 의미 없는 문자와 숫자의 조합처럼 보이며, 원본 데이터를 알아볼 수 없습니다.
  • 전송:
    암호화된 데이터를 수신자에게 전송합니다. 이때, 암호화된 데이터 자체만이 전송되며, 대칭키는 안전한 방법으로 별도로 공유되어야 합니다.
  • 복호화(Decryption):
    수신자가 동일한 대칭키를 사용해 암호화된 데이터를 복호화하여 원본 데이터를 얻습니다. 복호화 과정은 암호화 과정의 역순으로 진행됩니다.



대칭키 암호화의 장단점

대칭키 암호화의 장점

  • 속도와 효율성:
    대칭키 암호화는 비대칭키 암호화(예: RSA)보다 훨씬 빠르고 계산적으로 효율적입니다. 따라서 큰 데이터를 암호화하는 데 적합합니다.
  • 단순한 구조:
    대칭키 암호화의 알고리즘은 비교적 간단하고 구현이 쉬워 다양한 응용 프로그램에서 사용할 수 있습니다.

대칭키 암호화의 단점

  • 키 분배 문제:
    가장 큰 단점은 키 분배입니다. 대칭키는 암호화와 복호화 모두에 사용되기 때문에, 통신을 하려는 양쪽 모두가 같은 키를 가져야 합니다. 이 키를 안전하게 전달하는 것이 매우 중요한데, 키가 노출되면 전체 통신이 위험해질 수 있습니다.
  • 확장성 문제:
    많은 사용자 간의 통신에서는 각 사용자 쌍마다 고유한 키가 필요합니다. 사용자 수가 많아지면 관리해야 할 키의 수가 급격히 증가하여, 관리가 복잡해질 수 있습니다.



비대칭키(공개키) 암호화 방식

비대칭키 암호화 방식(Asymmetric Key Encryption), 또는 공개키 암호화 방식(Public Key Encryption)은 서로 다른 두 개의 키를 사용하여 데이터를 암호화하고 복호화하는 암호화 방식입니다. 이 방식에서 하나의 키는 공개키(Public Key), 다른 하나는 개인키(Private Key)라고 불립니다. 공개키는 누구에게나 공개할 수 있지만, 개인키는 비밀로 유지해야 합니다.
비대칭키 암호화는 보안이 중요한 인터넷 통신, 디지털 서명, 인증 등에 필수적인 기술입니다. 대칭키 암호화에 비해 속도는 느리지만, 키 분배 문제를 해결하고, 높은 보안을 제공할 수 있습니다. 현재의 많은 보안 프로토콜은 비대칭키 암호화와 대칭키 암호화를 결합하여 사용하는 하이브리드 방식을 채택하고 있습니다.



비대칭키 암호화의 작동 방식

  • 키 쌍 생성:
    암호화 시스템에서 한 쌍의 키가 생성됩니다. 이 키 쌍은 공개키와 개인키로 구성됩니다. 두 키는 수학적으로 연관되어 있지만, 한쪽 키로 암호화된 데이터를 다른 쪽 키 없이는 복호화할 수 없습니다.
  • 공개키를 사용한 암호화:
    메시지를 보내는 사람(송신자)은 수신자의 공개키를 사용하여 데이터를 암호화합니다. 공개키로 암호화된 데이터는 해당 공개키와 쌍을 이루는 개인키로만 복호화할 수 있습니다.
  • 개인키를 사용한 복호화:
    수신자는 자신의 개인키를 사용해 암호화된 데이터를 복호화합니다. 공개된 공개키만으로는 복호화가 불가능하므로, 개인키를 가진 사람만 원본 데이터를 복원할 수 있습니다.
    • 개인키를 사용한 서명 생성 및 공개키를 통한 검증 (선택적):
      개인키는 디지털 서명 생성에도 사용됩니다. 송신자는 데이터를 개인키로 서명하고, 수신자는 송신자의 공개키를 사용해 서명의 진위를 검증할 수 있습니다. 이 과정을 통해 데이터의 무결성과 송신자의 신원을 확인할 수 있습니다.



비대칭키 암호화의 장단점

비대칭키 암호화의 장점

  • 보안성:
    공개키를 자유롭게 배포할 수 있으므로, 키 분배의 문제를 해결할 수 있습니다. 송신자가 공개키만으로 데이터를 암호화할 수 있으므로, 암호화 과정에서 개인키의 노출 위험이 없습니다.
    또한, 공개키로는 암호화된 데이터를 복호화할 수 없으므로, 개인키를 가진 사람만이 데이터를 해독할 수 있습니다.
  • 디지털 서명:
    비대칭키 암호화는 디지털 서명을 가능하게 합니다. 이를 통해 데이터가 전송 중에 변조되지 않았으며, 특정 개인이 서명했음을 증명할 수 있습니다.
  • 신원 인증:
    비대칭키 암호화는 인증 시스템에서 사용되며, 예를 들어 SSL/TLS에서 서버의 신원을 인증하는 데 활용됩니다. 이는 중간자 공격을 방지하는 데 중요한 역할을 합니다.

비대칭키 암호화의 단점

  • 속도:
    비대칭키 암호화는 대칭키 암호화보다 훨씬 느립니다. 이는 큰 데이터를 처리할 때 비효율적일 수 있습니다. 그래서 비대칭키 암호화는 주로 작은 데이터(예: 세션 키)를 암호화하는 데 사용되고, 큰 데이터는 대칭키로 암호화합니다.
  • 복잡성:
    비대칭키 암호화는 수학적으로 복잡하며, 이를 구현하고 운영하는 데 더 많은 계산 리소스가 필요합니다.







전자 서명

전자 서명(Electronic Signature)은 디지털 문서나 데이터의 신원 인증과 무결성을 보장하기 위해 사용되는 전자적인 형태의 서명입니다. 전자 서명은 서명자가 특정 문서에 서명했다는 것을 증명할 수 있게 해주며, 법적 효력을 가지는 경우가 많습니다.
전자 서명은 디지털 문서나 데이터의 무결성과 신뢰성을 보장하는 중요한 기술입니다. 비대칭키 암호화 방식을 사용하여 서명자의 신원을 인증하고 문서의 변조를 방지하며, 법적 효력을 가질 수 있습니다.
전자 서명은 전 세계적으로 비즈니스, 법률, 정부에서 널리 사용되고 있으며, 전자 상거래와 디지털 트랜잭션의 필수적인 요소로 자리 잡고 있습니다.



전자 서명의 주요 개념

  • 서명자의 신원 인증:
    전자 서명은 서명자의 신원을 확인할 수 있도록 합니다. 서명자가 특정 문서에 서명했음을 증명하며, 이 서명은 일반적으로 서명자의 개인키를 사용해 생성됩니다.
  • 무결성 보장:
    전자 서명은 서명된 문서가 서명 이후로 변조되지 않았음을 보장합니다. 문서가 조금이라도 수정되면 전자 서명이 유효하지 않게 되기 때문에, 서명된 데이터의 무결성을 확실히 유지할 수 있습니다.
  • 비가역성:
    한 번 전자 서명을 하면, 서명자가 서명을 부인할 수 없는 특성을 가집니다. 이는 서명자가 문서에 서명한 사실을 부정할 수 없도록 만듭니다.



참고 자료

HTTPS 참고 영상 : https://www.akamai.com/ko/glossary/what-is-https?vid=what-is-https-or-secure-web-protocol-video
암호화 방식(이미지 출처) : https://hanjungv.github.io/2017-11-07-1_CS_SSL/

profile
성장하는 프론트엔드 개발자입니다.

0개의 댓글