암호화는 승인된 당사자만 정보를 이해할 수 있도록 데이터를 스크램블한 방법이다. 이를 복화화하려면 송신자와 수신자가 서로 동의한 키가 필요하다.
- 스크램블
- 각 단어나 문자를 패턴에 따라 암호화하는 것이 아니라 무작위 방식으로 개별 데이터 비트를 섞는 방식
- 예를 들어, 공통 128비트 고급 암호화 표준(AES, Advanced Encryption Standard)로 암호화 된 파일의 경우 이 파일을 구성하는 비트는 약 10회 스크램블 되며 다른 컴퓨터가 키 없이 해독하려면 아주 오랜 시간이 걸린다.
- 대칭 암호화
- 대칭 암호화는 키를 하나만 사용하는 암호화 방법이다.
- 일반적으로 사용되는 대칭 암호화 알고리즘은 DES, AES가 있다.
- Plaintext + key = ciphertext // Ciphertext + key = plaintext
- 비대칭 암호화
- 공개키 암호화
- 공개 키 암호화는 두 개의 다른 키(공개 키, 개인 키)로 데이터를 암호화하거나 서명하고 키 중 하나인 공개 키를 누구나 사용할 수 있도록 하는 방법이다.
- 공개 키로 암호화된 데이터는 개인키로만 복호화할 수 있다.
- 일반적으로 사용되는 비대칭 암호화 알고리즘은 RSA, DH(Diffie-Hellman)이 있다.
- HTTPS를 가능하게 하는 프로토콜인 TLS는 부분적으로 비대칭 암호화를 쓴다.
- 비대칭 암호화로 인증을 한 후 대칭 암호화로 보안적 통신을 시작한다.
- TLS 핸드셰이크 과정에서 처음 인증할 때 비대칭암호화를 하고 그 이후 클라이언트와 서버는 세션 키를 기반으로 대칭 암호화 기반의 암호화 통신을 한다.
- 암호화의 필요성
- 암호화는 의도된 수신자 또는 송신자를 제외하고는 통신을 하이재킹하여 읽을 수 없게 한다.
- 민감한 데이터의 유출을 방지하고 데이터 무결성을 보장한다.
- TLS 핸드셰이크
- SSL(Secure Socket Layer)는 SSL 1.0부터 시작해서 SSL 2.0, SSL 3.0, TLS(TransportLayer Security Protocol) 1.0, TLS 1.3까지 버전이 올라가며 마지막으로 TLS로 명칭이 변경되었다.
- TLS는 전송 계층에서 보안을 제공하는 프로토콜이다.
- 클라이언트와 서버가 통신할 때 TLS를 통해 제 3자가 메시지를 도청하거나 변조하지 못하도록 한다.
- 사용할 TLS 버전을 정하고, 사이퍼슈트, 서버의 공개 키, SSL 인증서를 기반으로 인증작업을 수행한다. 이후 대칭 암호화를 위해 세션 키를 생성한다.
- Client Hello
- 클라이언트는 TLS버전, 사이퍼슈트와 클라이언트 랜덤값, 임시 DH 매개변수를 서버에 보낸다.
- Server Hello, EncryptedExtensions, Certificate, CertificateVerify
- 서버는 클라이언트로부터 받은 옵션을 확인한다. 서버와 클라이언트 모두에서 지원하는 가장 높은 TLS 버전을 식별하며 결정, 사이퍼슈트 지원 여부를 확인한다. 공개 키가 포함된 SSL 인증서, 서버 랜덤값, 임시 DH 매개변수를 보낸다. 클라이언트와 서버 각각 서로 교환한 DH 매개변수를 사용하여 세션키를 생성한다.
- Finished
- 서버와 클라이언트 모두 이전에 교환된 모든 메시지에 대한 무결성과 인증을 확인하는 메세지를 보내고 클라이언트와 서버, 세션키를 기반으로 대칭 암호화된 통신이 시작된다. (보안 세션의 시작)
- 키 교환 알고리즘으로는 대표적으로 RSA, DH가 있다. TLS1.3에서는 RSA의 경우 취약점이 있기 때문에 공식적으로 지원하지 않는다. 대신 타원곡선 DH를 사용한다.
- Client Hello
- DH 매개변수
- Diffie-Hellman 알고리즘은 서로 공개 값 공유 -> 비밀 값과 혼합 -> 혼합 값 공유 -> 각자의 비밀 값과 혼합 의 과정을 통해 공통의 암호키를 만드는 알고리즘이다.
- DH에는 그냥 디피헬만을 사용하는 DHE / 타원곡선 암호화방법과 DH를 섞은 ECDHE가 있고 보통 ECDHE를 쓴다.
- 타원곡선 암호화
- 곡선을 사용하여 개인 키 보유자만 알 수 있는 타원곡선을 그린다.
- 이를 기반으로 교차점을 생성하고 교차점의 수를 기반으로 암호를 설정한다.
- 타원곡선 암호화
- 사이퍼슈트
- 프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약을 뜻한다.
- 암호제품군이라고도 한다.
- TLS1.3에는 다섯 개의 방식이 존재한다.
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_CCM_SHA256
- TLS_AES_128_CCM_8_SHA256
- AEAD 사이퍼 모드
- AEAD(Authenticated Encryption with Associated Data)는 데이터 암호화 알고리즘이다.
- 해싱 알고리즘
- 데이터를 추정하기 힘든 더 작고, 섞여 있는 조각으로 만드는 알고리즘
- SSL/TLS는 해싱 알고리즘으로 SHA256, SHA384를 쓴다.
- SHA256은 해시 함수의 결괏값이 256비트인 알고리즘이다.
- 인증서가 올바른 인증서인지 확인할 떄 전사서명을 이용하는데 이 때 해싱 알고리즘이 쓰인다.
- 인증 생성, 인증 확인 작업을 거친다.
- 인증 생성작업에서는 전자 서명 메시지를 해싱하고 확인작업에서는 메시지를 복호화해서 해시를 서로 비교하여 올바른 메시지인지 확인한다.
- 인증서
- 인증서는 1. 주체, 2. 공개키 를 포함하는 데이터 파일이다.
- 보통 인증기관인 CA에서 발급한 SSL 인증서를 기반으로 인증작업을 수행한다.
- 주체는 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지 확인할 때 쓰이고 공개 키는 처음 인증작업을 수행할 때 쓰인다.
- CA
- 인증서를 발급하는 기업들을 CA(Certificate Authority)라고 한다.
- 서비스의 도메인, 공개 키와 같은 정보는 서비스가 CA로부터 인증서를 구입할 때 제출해야 한다.
- 인증서의 종류
- 단일 도메인: 단 하나의 도메인에 적용되는 인증서
- 와일드카드: 도메인의 하위 도메인도 포함하는 인증서
- 멀티 도메인: 관련되지 않은 다수의 도메인에도 적용될 수 있는 인증서
- RSA의 취약점
- RSA의 경우 클라이언트가 생성한 임시 암호값을 서버로 전송하지만 DH의 경우 클라이언트와 서버가 서로 교환한 DH 매개변수를 사용해 개인 키를 만든다. 이 때문에 RSA는 클라이언트에서 생성한 임시 암호값이 탈취당한 경우 해킹의 위험이 있다. 그러나 DH의 경우 탈취당해도 공통의 암호 키를 못 만들기 때문에 보안성이 더 좋다.
- 0 - RTT
- 세션 키가 생성된 이후 다시 그 사이트에 방문하면 미리 만들어 놓은 세션키(PSK, pre-shared key)를 기반으로 연결을 생성하기 때문에 이 때부터는 인증에 드는 비용이 없다. 따라서 인증에 관한 RTT가 발생하지 않기 때문에 0 - RTT가 된다.
출처
CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조 - 큰돌
'CS 지식 > 네트워크' 카테고리의 다른 글
로그인 방식 (0) | 2024.08.25 |
---|---|
브라우저의 캐시 (0) | 2024.08.25 |
HTTP/2, HTTP/3의 차이 (0) | 2024.08.21 |
HTTP/1.0, HTTP/1.1의 차이 (0) | 2024.08.19 |
HTTP 헤더 (0) | 2024.08.19 |