TLS 1.2
비대칭키 암호화(RSA 등)와의 결합
- 비대칭키 암호화를 사용하여 대칭키를 안전하게 전송하는 방식도 자주 사용됩니다. 이 방법에서는 수신자가 공개 키를 먼저 제공하고, 송신자는 이 공개 키로 대칭키를 암호화하여 수신자에게 전송합니다. 수신자는 자신의 개인 키로 이 암호화된 대칭키를 복호화하여 비밀 키를 획득하게 됩니다.
TLS 1.3
디피-헬만 키 교환(Diffie-Hellman Key Exchange)
- 디피-헬만 알고리즘은 안전하게 네트워크를 통해 대칭키를 교환할 수 있는 대표적인 방법입니다. 이 알고리즘은 수학적인 원리를 이용해, 송신자와 수신자가 공개적인 통신 채널을 통해서도 비밀 키를 안전하게 교환할 수 있도록 합니다.
- 각자가 개인키와 공개키를 생성하고, 이들을 교환해 최종적으로 동일한 비밀 키를 계산하게 됩니다. 이 과정에서 실제로 비밀 키가 전송되지 않기 때문에 안전합니다.
예시
예시를 통해서 좀 더 이해해보겠습니다.
위의 x,y는 비밀키입니다.
그리고 g,n은 각 위치의 클라이언트/서버가 가지고 있는 공개키입니다.
비밀키와 공개키를 연산을 통해서 조합을 해서 대칭키를 하나 만드는것이 디피-헬만 키 교환의 핵심입니다.
여기서 g^x라고 나오는것은 g 숫자를 x번 곱한다는 의미입니다.
그래서 RSA와 같은 String 키가 아니라 디피 헬만 키 교환의 경우 큰 정수인 비밀키와 공개키를 사용합니다.
공개 키의 경우 큰 소수를 사용합니다.
큰 수의 기준은 2048비트의 수 이상이라고 합니다.
이 비밀키와 공개키를 통해서 g^x % n 즉, g^x (mod n) 값을 계산해서 대칭키를 만들고 이를 교환하는 방식입니다.
조금 더 자세히 순서를 알아보겠습니다.
1. 우선은 서로의 서버는 서로의 공개키 g,n을 가지고 있습니다. (그림의 빨간색 키)
편의상 g는 client의 공개키, n은 server의 공개키로 하겠습니다.
그리고 x를 client의 비밀키, y를 server의 비밀키로 정의하겠습니다. (x는 파란색, y는 분홍색키 입니다.)
2. Client가 g^x % n = k을 계산해서 서버에게 전달합니다.
3. Server는 그 받은 값 k^y = ky를 하여 대칭 키로 보유하고 클라이언트에게 다시 전달합니다.
4. Client는 다시 받은 값 ky를 그대로 대칭키로 사용하고 이후 실제 데이터 통신을 이어나가게 됩니다.
그래서 결국은 이 데이터를 볼 수 있는 사람들은 연산된 공개키와 비밀키를 볼 수 있긴합니다.
다만, 이를 계산하는것이 어렵기에 보안이 좋다고 정의를 내릴 수 있습니다.
이는 수학에서의 이산 로그 문제(Discrete Logarithm Problem, DLP) 로 알려져 있습니다.
부록으로 내용을 추가했으니 이해가 필요 한 경우 읽어보시면 좋을것 같습니다.
또, 다른 방법으로 ECC( Elliptic Curve Cryptography, 타원곡선 암호화)가 있습니다.
이 내용은 추후 추가해보도록 하겠습니다.
TLS 요약
- TLS 1.2
- 비대칭키 사용: RSA 같은 비대칭 알고리즘으로 대칭키를 암호화하여 안전하게 공유
- TLS 1.3
- 디피-헬만: 수학적 알고리즘을 사용해 공개된 채널에서도 안전하게 키를 교환
부록
왜 이산 로그 문제는 어려운가?
이산 로그 문제의 어려움은 다음과 같은 이유로 발생합니다:
- 지수 계산은 쉬움, 역 계산(로그)은 어려움:
- g^x mod p 를 계산하는 것은 매우 효율적인 알고리즘이 존재하지만, 그 결과로부터 x를 역으로 추론하는 것은 어렵습니다.
- 예를 들어, g = 5 , p=23 일 때, g^x mod p = 8을 만족하는 를 찾는 것은 단순한 계산으로 구하기 어렵습니다. 이는 작은 p일 경우에는 몇번의 시도를 통해 해결할 수 있지만, 실제 암호화에서 사용하는 큰 소수의 경우 매우 어려워집니다.
- 소수 p의 크기:
- 이산 로그 문제의 어려움은 사용하는 소수 의 크기에 비례합니다. 보통 암호화에서 사용되는 p는 2048비트 이상의 매우 큰 소수로, 이 값이 커질수록 문제를 푸는 데 필요한 계산량은 기하급수적으로 증가합니다.
- 알려진 빠른 알고리즘 부재:
- 일반적인 지수 계산을 효율적으로 해결할 수 있는 알고리즘이 많이 존재하지만, 이산 로그 문제를 빠르게 해결할 수 있는 효율적인 알고리즘은 현재까지 발견되지 않았습니다. 공격자는 거의 무작위 시도에 가까운 방식으로 수많은 계산을 해야만 답을 찾을 수 있습니다.
이산 로그 문제 해결 시간 추정
일반적인 데스크탑 컴퓨터에서 2048비트 수준의 이산 로그 문제를 풀기 위해 필요한 시간은 아래와 같이 매우 비현실적입니다:
- 1024비트 소수: 수십 년에서 수백 년.
- 2048비트 소수: 수백 년에서 수천 년 이상.
- 3072비트 소수: 수만 년 이상.
이 추정치는 최신 슈퍼컴퓨터에서도 동일하게 적용되며, 특히 양자 컴퓨터가 개발되지 않는 한 이산 로그 문제를 푸는 것은 현실적으로 불가능합니다.
양자 컴퓨터와의 비교
양자 컴퓨터에서는 **쇼어 알고리즘(Shor's Algorithm)**을 사용하여 이산 로그 문제를 빠르게 해결할 수 있습니다. 하지만 현재까지 실용적인 양자 컴퓨터는 존재하지 않으며, 수십 큐비트 이상의 양자 컴퓨터를 구현하는 것은 여전히 연구 단계입니다.
따라서 현재의 일반적인 컴퓨터로는 이산 로그 문제를 해결하는 것이 현실적으로 불가능하며, 이러한 이유로 이산 로그 문제가 암호화의 핵심 보안 요소로 사용됩니다.
'CS 지식 > 네트워크 기본 다지기' 카테고리의 다른 글
SNI (Server Name Indication) (0) | 2024.10.01 |
---|---|
UDP와 DNS (1) | 2024.09.30 |
Layer 4 vs Layer 7 Load balancing (0) | 2024.09.29 |
TCP Flow Control & Congestion Control (4) | 2024.09.23 |
TCP Segment 구조 (0) | 2024.09.23 |
개발 및 IT 관련 포스팅을 작성 하는 블로그입니다.
IT 기술 및 개인 개발에 대한 내용을 작성하는 블로그입니다. 많은 분들과 소통하며 의견을 나누고 싶습니다.