ECC 디피-헬먼은 DH의 ECC 버전이다.
공개된 정보는 곡선과 곡선 상의 한 점으로 구성된다.
y^2 = x^3 + 11x + b (mod 167)
다음 점 (x,y)를 선정하고 b를 이 점이 곡선 상에 위치하도록 결정
(x,y) = 2,7 -> b = 19
최종적으로 공개된 정보
y^2 = x^3 + 11x + 19 (mod 167), 점 (2,7)
A와 B는 각각 자신들의 비밀 승수를 선정한다.
A의 비밀 승수 a = 15
B의 비밀 승수 b = 22
그러면 A는 다음과 같이 계산할 수 있다.
a(2,7) = 15(2,7) = (102,88)
A는 이 결과를 B에게 보낸다.
B도 다음과 같이 계산하고 그 결과를 A에게 보낸다.
b(2,7) = 22(2,7) = (9,43)
A는 다음과 같이 자신의 비밀 승수 a를 B에게서 받은 값에 곱한다.
a(9,43) = 15(9,43) = (131,140)
B도 유사한 방식으로 다음과 같이 계산한다.
b(102,88) = 22(102,88) = (131,140)
이렇게 하여 A와 B는 대칭키로 사용하기에 적절한 비밀정보를 공유하게 된다.
이것이 가능한 것은 AB(2,7) = BA(2,7) 이기 때문이다. ( 간략한 그림 )
이러한 DH ECC도 중간자 공격에 취약하기는 마찬가지이다.
공개된 정보는 곡선과 곡선 상의 한 점으로 구성된다.
y^2 = x^3 + 11x + b (mod 167)
다음 점 (x,y)를 선정하고 b를 이 점이 곡선 상에 위치하도록 결정
(x,y) = 2,7 -> b = 19
최종적으로 공개된 정보
y^2 = x^3 + 11x + 19 (mod 167), 점 (2,7)
A와 B는 각각 자신들의 비밀 승수를 선정한다.
A의 비밀 승수 a = 15
B의 비밀 승수 b = 22
그러면 A는 다음과 같이 계산할 수 있다.
a(2,7) = 15(2,7) = (102,88)
15(2,7)은 (2,7) + (2,7) + ... + (2,7) 총 15회는 더하는 것과 같다.
타원곡선 암호에서 두 점을 더하는 방법은 전 글에서 해보았다.
http://ezbeat.tistory.com/335
하지만 (102,88)을 보면 타원곡선 내 없는 점 같이 보인다.
y^2 = 1062349 mod 167 = 62 mod 167
하지만 62에서 167을 계속 더해가면 88의 제곱인 7744 값이 나오게 된다.
즉, 62 mod 167 = 7744 mod 167 ( 7744 = 88^2 )
위에서 본 15회의 덧셈을 손으로 한다는 것은 시간상 문제도 있으므로 프로그램을 짜서 돌리는게 훨씬 현명하다.
ECC에서 두 점 합을 구하는 프로그램을 만들어 보았다. 단순히 두 점의 합을 구하는 것이기 때문에
15회의 덧셈을 위해선 입력을 몇 번 더 해주어야한다. 코드이다.
A는 이 결과를 B에게 보낸다.
B도 다음과 같이 계산하고 그 결과를 A에게 보낸다.
b(2,7) = 22(2,7) = (9,43)
A는 다음과 같이 자신의 비밀 승수 a를 B에게서 받은 값에 곱한다.
a(9,43) = 15(9,43) = (131,140)
B도 유사한 방식으로 다음과 같이 계산한다.
b(102,88) = 22(102,88) = (131,140)
이렇게 하여 A와 B는 대칭키로 사용하기에 적절한 비밀정보를 공유하게 된다.
이것이 가능한 것은 AB(2,7) = BA(2,7) 이기 때문이다. ( 간략한 그림 )
이러한 DH ECC도 중간자 공격에 취약하기는 마찬가지이다.
'My Study > Cryptography' 카테고리의 다른 글
PKCS 용도 (0) | 2011.06.07 |
---|---|
타원곡선 암호 (1) | 2011.06.03 |
디피-헬먼 키교환 알고리즘 (2) | 2011.06.03 |
RSA (1) | 2011.06.03 |
배낭암호 (2) | 2011.06.03 |