인디노트

디피헬만 (Diffie-Hellman) 공식 초간단 (ㅎㅎ) 본문

인증기술

디피헬만 (Diffie-Hellman) 공식 초간단 (ㅎㅎ)

인디개발자 2022. 1. 2. 22:08

A
x = 5
p = 11

B
y = 3
g = 7

위에서 A 는 x 가 비밀키이며 B 는 y 가 비밀키이다.

p 와 g 는 공개키이며 서로 공유한다. 즉, A 와 B 는 p, g 를 모두 알고 있다.

A 가 다음과 같이 Ra 를 계산하여 B 에게 보낸다.
Ra = g^x mod p

B 가 다음과 같이 Rb 를 계산하여 A 에게 보낸다.
Rb = g^y mod p

이제 A 는 다음과 같이 K 를 구한다.
K = Rb^x mod p

그리고 B 는 다음과 같이 K 를 구한다.
K = Ra^y mod p

결과적으로 A 와 B 는 동일한 K 값을 얻을 수 있다.

K 를 암호키로 사용하게 된다.

 

p를 아주 매우큰 소수로 정해야 한다.
p-1이 적어도 하나의 큰 소인수(60자리의 10진수 이상)을 가져야하며 K 를 구한 즉시 A 와 B 는 각각 x, y 를 폐기해야 한다.

 

다음의 C 코드 예제를 보자. Ka 와 Kb 가 같은 값이 산출된다.

디피헬만 키교환 C 코드 예제

//
//  main.c
//  dh-sample
//
//  Created by GYUYOUNG KANG on 2022/01/02.
//

#include <stdio.h>

int main(int argc, const char * argv[]) {
	int x = 384782012;
	int p = 238492827;
	
	int y = 847362879;
	int g = 618293827;
	
	int Ra = g^x % p;
	int Rb = g^y % p;
	
	int Ka = Rb^x % p;
	int Kb = Ra^y % p;
	
	printf("Ka=%d, Kb=%d\n", Ka, Kb);
	
	return 0;
}

 

반응형

'인증기술' 카테고리의 다른 글

사설 SSL 인증서 만드는 순서 스크립트 기록용  (0) 2022.12.06
NullAuthPlugin  (4) 2022.06.28
WebAuthn Test App  (0) 2021.01.12
Welcome to WebAuthn workshop  (0) 2020.12.22
Working with FIDO and the WebAuthn API  (0) 2020.12.17
Comments