HTTP(HyperText Transfer Protocol)
하이퍼텍스트(HyperText)를 전송(Transfer)하기 위해 사용되는 통신 규약(Protocol)입니다. 또한 인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약 이라고도 할 수 있습니다.
HTTP 서버는 기본 포트인 80번 포트에서 서비스 대기 중이며, 클라이언트(웹 브라우저)가 TCP 80 포트를 사용해 연결하면 서버는 요청에 응답하면서 자료를 전송합니다.
HTTP는 정보를 텍스트로 주고 받기 때문에 네트워크에서 전송 신호를 인터셉트 하는 경우 원하지 않는 데이터 유출이 발생할 수 있습니다. 이러한 보안 취약점을 해결하기 위한 프로토콜이 HTTP에 S(Secure Socket)가 추가된 HTTPS입니다.
HTTPS
HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜입니다. HTTPS는 HTTP와 다르게 443번 포트를 사용하며, 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 암호화를 지원하고 있습니다.
암호화 방식
대칭 암호화
대칭 암호화는 키를 하나만 사용하는 암호화 방법입니다. 예를 들어 "hello"라는 텍스트를 키로 암호화한다고 해봅시다. 동일한 키로 암호를 해독해서 hello를 반환한 것을 볼 수 있습니다.
Plaintext + key = ciphertext: hello + 2jd8932kd8 = X5xJCSycg14=
Ciphertext + key = plaintext: X5xCSycg14= + 2jd8932kd8 = hello
일반적으로 사용되는 대칭 암호화 알고리즘은 DES, AES가 있습니다.
비대칭 암호화
비대칭 암호화는 공개키 암호화라고도 합니다.
공개 키 암호화는 두 개의 다른키(공개키, 개인키)로 데이터를 암호화하거나 서명하고 키 중 하나인 공개 키를 누구나 사용할 수 있도록 하는 방법입니다.
사용방식은 크게 두가지로 나눌 수 있습니다.
- 수신자의 공개키로 암호화하여 보내는 경우
소량의 메세지를 암호화 하거나, 키 교환시 키를 암호화 하는데 주로 사용하는 방식입니다. - 송신자의 개인키로 암호화하여 보내는 경우
송신자의 공개키만 있다면 열어볼 수 있으므로 인증과 부인방지가 목적입니다. (전자 서명의 기초)
일반적으로 사용되는 비대칭 암호화 알고리즘은 RSA, DH(Diffie-Hellman)이 있습니다.
HTTPS를 가능하게 하는 프로토콜인 TLS는 부분적으로 비대칭 암호화를 씁니다. (TLS 1.3)
TLS 핸드셰이크 과정에서 처음 인증할 때 비대칭 암호화를 하고 그 이후 클라이언트와 서버는 세션키 라고 하는 키를 기반한 대칭 암호화로 통신을 합니다.
암호화의 필요성
암호화는 의도된 수신자 또는 송신자를 제외하고는 통신을 하이재킹하여 읽을 수 없게 합니다. 이를 통해 민감한 데이터의 유출을 방지하고 데이터의 무결성을 보장합니다.
*데이터 무결성: 데이터의 정확성과 일관성
[참고] TLS Transport Layer Security의 줄임말. 과거 SSL에서 발전하며 이름이 변경 된 것이다. 하지만 아직도 SSL이란 명칭이 많이 사용되고 있다.
배경지식
2023.04.07 - [CS/네트워크] - 전자서명과 CA
위 글을 읽으면 뒤의 내용을 더 이해하기 쉽습니다.
TLS 핸드셰이크
1.3 기준
사용할 TLS버전을 정하고, 사이퍼슈트, 서버의 공개키, SSL 인증서를 기반으로 인증작업을 수행합니다. 이 후 대칭 암호화를 위해 세션키를 생성합니다.
1. Client Hello
클라이언트는 TLS버전, 사이퍼슈트와 클라이언트 랜덤값(무작위 문자열), 임시 DH 매개변수를 서버에게 보냅니다.
2. Server Hello, EncryptedExtensions, Certificate, CertificateVerify
서버는 클라이언트로 부터 받은 옵션을 확인합니다. 서버와 클라이언트 모두에서 지원하는 가장 높은 TLS 버전을 식별하여 결정, 사이퍼슈트 지원 여부를 확인합니다. 공개키가 포함된 SSL 인증서, 서버 랜덤값, 임시 DH 매개변수를 보냅니다. 그리고 클라이언트와 서버 각각 서로 교환한 DH 매개변수와 서버랜덤값, 클라이언트 랜덤값을 사용하여 임시 암호 키(세션키)를 생성합니다.
3. Finished
클라이언트와 서버가 세션키를 기반으로 대칭 암호화된 통신이 시작됩니다. (보안세션이 시작되었다고도 말합니다.)
참고: TLS 핸드셰이크 과정에서 발급된 세션키는 세션이 종료될 경우 폐기 된다.
키교환 알고리즘으로는 대표적으로 RSA와 DH가 있습니다. 여기서는 DH를 기반으로 설명합니다. TLS1.3버전에서는 RSA 같은 경우 취약점이 있기 때문에 공식적으로 지원하지 않습니다. DH의 경우 타원곡선 DH를 사용합니다.
0 - RTT
세션키가 생성된 이 후 다시 그 사이트에 방문한다면 미리 만들어 놓은 세션키(PSK, pre-shared key)를 기반으로 연결을 생성하기 때문에 이 때 인증에 드는 비용은 없습니다.
즉, 인증에 관한 RTT가 발생되지 않기 때문에 0 - RTT 라는 특징을 갖습니다.
RSA의 취약점
RSA의 경우 클라이언트가 생성한 임시 암호값을 서버로 전송하지만 DH의 경우 클라이언트와 서버가 서로 교환한 DH 매개변수를 사용해 개인키를 만듭니다. 이 때문에 RSA는 클라이언트에서 생성한 임시 암호값이 탈취당한 경우 해킹의 위험이 있습니다. 그러나 DH의 경우 탈취당해도 공통의 암호키를 못 만들기 때문에 더 좋은 것이죠.
사이퍼슈트
사이퍼 슈트는 프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약을 말하며 암호제품군이라고도 불립니다.
샤이퍼 슈트의 예시인 TLS_AES_128_GCM_SHA256 에는 세 가지 규약이 들어 있음을 뜻합니다.
- TLS는 프로토콜
- AES_128_GCM은 AEAD 사이퍼 모드
- SHA256은 해싱 알고리즘
AEAD 사이퍼 모드
AEAD(Authenticated Encryption with Associated Data)는 데이터 암호화 알고리즘이며 AES_128_GCM 등이 있습니다. 예를 들어 AES_128_GCM이라는 것은 128비트의 키를 사용하는 표준 블록 암호화 기술과 병렬 계산에 용이한 암호화 알고리즘 GCM이 결합된 알고리즘을 뜻합니다.
해싱 알고리즘
해싱 알고리즘은 데이터를 추정하기 힘든 더 작고, 섞여 있는 조각으로 만드는 알고리즘입니다. SSL/TLS는 해싱 알고리즘으로 SHA-256 알고리즘과 SHA-384 알고리즘을 쓰는데, 그 중 SHA-256 알고리즘은 해시 함수의 결괏값이 256비트인 알고리즘이며 비트 코인을 비롯한 많은 블록체인 시스템에서 사용됩니다.
장단점
장점
- HTTPS는 웹사이트의 무결성을 보호해준다. 웹 사이트와 사용자 브라우저 사이의 통신을 침입자가 건드리지 못하도록 한다.
- 검색엔진 최적화(SEO)에 있어서도 큰 혜택을 볼 수 있다.
구글에서는 HTTPS를 사용하는 웹사이트에 대해서 검색 순위 결과에 약간의 가산점을 주겠다고 발표
- HTTP/2 를 사용할 수 있다.
단점
- 인증서를 발급 받기 위해 추가 비용이 발생한다.
- HTTPS도 무조건 안전한 것은 아니다. (신뢰받는 CA 기업이 아닌 자체 인증서 발급한 경우 등)
- 모든 사이트에서 텍스트를 암호화해서 주고 받으면 과부하가 걸려 속도가 느려질 수 있다. 중요한 사이트는 HTTPS로 관리하고, 그렇지 않은 사이트는 HTTP를 사용한다.
- 이때는 HTTPS지만 브라우저에서 주의 요함, 안전하지 않은 사이트와 같은 알림으로 주의 받게 된다.
내 생각
개인 정보와 같은 민감한 데이터를 주고 받아야 한다면 HTTPS를 이용해야 하지만, 노출이 되어도 괜찮은 단순한 정보 조회 등 만을 처리하고 있다면 HTTP를 이용하면 된다.
참고자료
2. https://rachel-kwak.github.io/2021/03/08/HTTPS.html
3. https://www.getoutsidedoor.com/2021/02/13/ssl-tls-%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C/
4. https://lnk7424.tistory.com/8
5. https://mangkyu.tistory.com/98
'CS > 네트워크 & 웹' 카테고리의 다른 글
토큰을 어디에 저장해야할까요? (4) | 2023.04.13 |
---|---|
Transfer-Encoding: Chunked (0) | 2023.04.11 |
REST란? REST API 와 RESTful API (0) | 2023.04.11 |
HTTP Cache (0) | 2023.04.10 |
전자서명과 CA (0) | 2023.04.07 |