타원곡선 암호 (2)
by Lee Ho Sung
지난번에는 타원곡선에 대해서 알아보았다. 이번에는 유한체의 타원곡선에 대해서 알아보자.
유한체는 유한개의 원소를 가지는 체(Field)이다. 체는 원소들 간의 덧셈, 곱셈의 연산 결과가 다시 그 안에 있는 (닫힘성)을 갖는 대수적 구조이다. 다시 말해 유한체는
- 유한개의 원소들이 집합을 이루면서,
- 덧셈과 곱셈 연산 두 쌍을 자유롭게 사용할 수 있고, (2개 연산자 사용)
- 각 원소가 0이 아닌 원소로 나눌 수 있는 대수적 구조 (곱셈 역원 존재)
이다.
유한체에서의 타원곡선을 그려 보자. 다음 타원 곡선을 그려보려고 한다. \(y^2 = x^3 + 7\)
# 타원 곡선을 정의하자. 유한체에서 타원곡선을 정의하기 위해 prime 으로 modular 연산을 하자.
prime = 53
def ecc(x):
return (x**3 + 7) % prime
# 53x53 범위 내에서 주어진 식을 만족하는 점을 모두 찍어보자.
points = []
for x in range(prime):
for y in range(prime):
if ecc(x) == (y**2)%prime:
points.append((FieldElement(x, prime), FieldElement(y, prime)))
fig = plt.figure()
plt.xlim(0, prime)
plt.ylim(0, prime)
for (x, y) in points:
plt.scatter(x.num, y.num, s=10, c='b', alpha=0.1)
유한체이기 때문에 곡선이 아닌 점들의 집합으로 나타낸다. 점만으로는 원래의 타원곡선 형태를 알기 어렵다.
Elliptic Curves over Finite Fields 에서도 동일한 그래프를 그려 볼 수 있다.
(8, 25) 의 inverse 가 (8, 23) 임을 알수 있다. y^2 에 따라 나타나는 성질로 이에 따라 y=(53/2)를 기준으로 상하 대칭이 되는 것을 확인할 수 있다.
곡선위에서의 덧셈 연산
곡선 위의 두 점 A, B를 임의로 정하고, 곡선 위에 그려 보자.
A = Point(points[4][0], points[4][1], FieldElement(0, prime), FieldElement(7, prime))
B = Point(points[9][0], points[9][1], FieldElement(0, prime), FieldElement(7, prime))
plt.scatter(A.x.num, A.y.num)
plt.annotate('A', (A.x.num+0.1, A.y.num+0.25), c='r')
plt.scatter(B.x.num, B.y.num)
plt.annotate('B', (B.x.num-0.1, B.y.num+0.25), c='r')
A와 B를 연결하는 직선을 찾자. modular 연산의 특징으로 y값이 53이 되면 다시 0부터 직선이 이어지는 특성을 갖는다.
# A와 B를 지나는 직선 찾기
la = (B.y.num - A.y.num) / (B.x.num - A.x.num)
lb = A.y.num - la*A.x.num
x_intercept = -(lb/la)
x_distance = (prime - lb) / la - x_intercept
# A+B 의 계산
C = A+B
# A+B의 x축이 나올때 까지 직선 그려 보기
i = 0
while True:
lx = np.linspace(A.x.num, C.x.num, 100)
ly = (la * (lx - x_distance*i) + lb)
plt.plot(lx, ly, linestyle='--', c='black', linewidth=1, alpha=0.5)
if la * (C.x.num - x_distance*i) + lb == (prime - C.y.num):
break
i += 1
다시 한번 떠올려 보면, 타원 곡선의 덧셈은 다음과 같의 정의한다.
- 두 점 A와 B를 지나가는 직선이 타원곡선과 새롭게 만나는 점 C를 찾는다.
- 그 점과 X축에 대해 대칭인 점이 덧셈의 결과다.
유한체에서도 이어진 직선(비록 직선이 끝을 만나면 반대쪽에서 다시 이어지지만)이 유한체 내의 점을 찾게 되고, X축에 대해 대칭인 점이 덧셈의 결과가 된다.
Subscribe via RSS