Share via


ECDH 알고리즘 개요(CNG 예제)

업데이트: 2008년 7월

두 사용자는 ECDH(Elliptic Curve Diffie-Hellman) 키 계약 프로토콜을 사용하여 공유 비밀 계약을 만들 수 있습니다. 비보안 공개 통신 수단을 통해 이를 수행할 수 있으며 개인 정보를 사전에 교환할 필요가 없습니다. 공유 비밀 계약은 일반적으로 키 자료를 파생하는 데 사용됩니다. AES(Advanced Encryption Standard) 알고리즘 등의 대칭 알고리즘에서 이러한 키 자료를 사용하여 이후 메시지를 암호화할 수 있습니다.

CNG(Cryptography Next Generation) 보안 통신 예제에서는 ECDH와 AES 알고리즘을 모두 사용한 CNG 구현을 보여 줍니다. Alice, Bob 및 Mallory는 Communicator 개체를 만들 때 Run 메서드에서 암호화 키를 만듭니다.

ECDH 수학

ECDH 프로토콜에서는 공개된 두 매개 변수인 p와 g를 사용합니다. p 매개 변수는 매우 큰 소수이며 g 매개 변수는 p보다 작은 정수입니다. 이러한 두 매개 변수는 비보안 회선을 통해 교환됩니다. Alice와 Bob은 공개된 두 매개 변수를 받은 후 비공개 정수를 선택합니다. Alice는 a를, Bob은 b를 선택합니다. 이러한 값을 개인 키라고 합니다.

그런 다음 Alice와 Bob은 공개 매개 변수와 개인 키를 사용하여 공개 키를 만듭니다. Alice는 (g^a) mod p를, Bob은 (g^b) mod p를 사용합니다. 이 키는 서로 일치하지 않으므로 비대칭 키입니다.

Alice와 Bob은 이러한 공개 키를 교환하고 이 키를 사용하여 공유 비밀 계약을 계산합니다. ECDH 수학에 따르면 Alice와 Bob은 서로의 개인 키를 모르지만 공유 비밀 계약을 계산한 결과는 서로 같습니다.

참고:

a, b 및 g^ab = g^ba만 비밀로 유지되고 다른 값은 모두 공개됩니다.

교환을 가로채면 p, g 및 두 공개 키를 복사할 수 있습니다. 그러나 Alice와 Bob의 개인 키를 모르는 경우 공개된 네 개의 공유 값을 통해 공유 비밀 계약을 생성하는 계산은 사실상 불가능합니다.

가능한 모든 키를 시도하여 ECDH로 암호화된 메시지를 강제로 해독하는 작업의 난이도는 이산 로그 문제의 난이도과 같습니다. 그러나 ECDH 알고리즘은 로그 곡선 대신 타원 곡선에 의존하므로 같은 보안 수준을 유지하면서 키 길이를 줄일 수 있습니다.

ECDH 예제

다음 예제에서는 작은 정수를 사용하여 ECDH 알고리즘을 보여 줍니다.

  1. Alice와 Bob은 소수 p와 기본 정수 g에 대해 합의합니다.

    p = 83, g = 8

  2. Alice는 비밀 정수 a = 9를 선택하고 Bob에게 (g^a) mod p를 전송합니다.

    (8^9) mod 83 = 5

  3. Bob은 비밀 정수 b = 21을 선택하고 Alice에게 (g^b) mod p를 전송합니다.

    (8^21) mod 83 = 18

  4. Alice는 ( ( (g^b) mod p)^a) mod p를 계산합니다.

    (18^9) mod 83 = 24

  5. Bob은 ( ( (g^a) mod p)^b) mod p를 계산합니다.

    (5^21) mod 83 = 24

g^(ab) = g^(ba)이므로 Alice와 Bob은 같은 값인 24를 계산합니다. 이 값이 공유 비밀 계약으로 사용됩니다. Alice와 Bob은 이 값을 사용하여 AES 알고리즘에서 메시지를 암호화하는 데 사용하는 키 자료를 파생합니다.

이 예제에서는 값이 24인 공유 비밀 계약을 생성합니다. 이 값은 작으므로 암호화된 메시지가 강제 해독 공격에 의해 손쉽게 해독될 수 있습니다. 실제 시나리오에서는 p, g, a 및 b가 훨씬 큰 숫자이며 해당 공유 비밀 계약을 생성하려면 컴퓨터가 필요합니다.

보안 통신 예제에 사용된 CNG 클래스는 복잡한 수학을 추상화하므로 사용자는 직접 큰 수를 곱할 필요가 없고 보안 솔루션을 구현하는 작업에 집중할 수 있습니다.

프로토콜 제한 사항

ECDH 키 교환 프로토콜은 공개 키를 보낸 사람을 인증하지 않으므로 중간자 개입 공격을 막을 수 없습니다. 도청자인 Mallory는 Alice의 공개 키를 가로채서 자신의 공개 키로 바꾸고 Bob에게 전송할 수 있습니다. 또한 Mallory는 Bob의 공개 키를 가로채서 자신의 키로 바꾸고 Alice에게 전송할 수 있습니다. 이렇게 하면 Mallory는 Alice와 Bob이 주고받는 모든 메시지를 손쉽게 해독할 수 있습니다. 메시지를 변경하고 자신의 키로 다시 암호화한 다음 받는 사람에게 전송할 수도 있습니다.

이 문제를 해결하기 위해 Alice와 Bob은 이 디지털 서명을 사용하여 공개 키에 서명한 후 키를 교환할 수 있습니다. 여기에는 두 가지 방법이 있습니다.

  • 음성 통화 또는 직접 전달 등의 보안 통신 수단을 사용하여 두 당사자 간에 디지털 서명 키를 전송합니다.

  • 공개 CA(인증 기관)를 사용하여 두 당사자에 신뢰할 수 있는 디지털 서명 키를 제공합니다.

두 경우 모두 외부 인증 체계를 사용하여 공개 키를 보낸 사람의 신원을 확인해야 합니다. CNG 예제에서는 키를 보낸 사람을 인증하지 않을 때의 결과를 보여 줍니다. 이 예제는 의도적으로 보안 허점을 노출하도록 작성되었습니다.

대칭 및 비대칭 키

ECDH와 같은 비대칭 시스템은 속도가 매우 느리므로 대규모 메시지를 암호화하는 데 사용되지 않으며, 속도가 훨씬 빠른 AES 등의 대칭 시스템이 대신 사용됩니다.

일반적인 암호화 솔루션에서는 비대칭 시스템을 사용하여 대칭 공유 비밀 계약을 파생합니다. 그런 다음 공유 비밀 계약을 사용하여 대칭 알고리즘에서 메시지를 암호화하는 데 사용하는 키 자료를 파생합니다.

CNG 보안 통신 예제에서는 이 동작을 다음과 같이 모델링합니다.

  • 비대칭 알고리즘인 ECDH 알고리즘의 CNG 구현(ECDiffieHellmanCng 클래스)을 사용하여 대칭 암호화 키(공유 비밀 계약)를 파생합니다.

  • 그런 다음 CNG ECDiffieHellmanCng.DeriveKeyMaterial 메서드에서 이 키를 사용하여 키 자료를 파생합니다. 대칭 AES 알고리즘의 CNG 구현(Aes 클래스)에서는 키 자료를 사용하여 메시지를 암호화합니다.

참고 항목

개념

CNG(Cryptography Next Generation) 보안 통신 예제

암호화 개요

변경 기록

날짜

변경 내용

이유

2008년 7월

항목이 추가되었습니다.

향상된 기능 관련 정보