본문 바로가기

수학11

서명 생성과 검증 여기에서 설명했듯이 스칼라 곱셈이 공개키 암호 기법의 핵심이다. 비트코인에서는 secp256k1 타원곡선을 사용한다. 타원곡선은 $y^2 = x^3 + ax + b$ 인데 secp256k1 는 a=0, b=7 인 곡선이다. 유한체 위수(order) p 값(소수)은 `2**256 - 2**32 - 977` 다. 생성점 $G_x$ 값은 `0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798` 다. 생성점 $G_y$ 값은 `0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 ` 다 G(생성점) 의 유한순환군 위수 n 값은 `0xffffffffffffffffffffffffffff.. 2022. 10. 29.
타원곡선 위 점의 스칼라 곱셈 타원곡선위 한점을 계속 더하는것이다. 그리고 그 결과는 예측하기 어렵다. $ (170,142) + (170, 142) = 2 \cdot (170, 142) $ $ 2 \cdot (170, 142) + (170, 142) = 3 \cdot (170, 142) $ prime = 223 a = FieldElement(0, prime) b = FieldElement(7, prime) x1 = FieldElement(170, prime) y1 = FieldElement(142, prime) p = Point(x1, y1, a, b) print(p + p) 스칼라 곱셈의 또다른 특징이 있다. 어떤 점에 스칼라 값을 계속 증가시키면서 곱하다 보면 무한원점(덧셈에 대한 항등원. I) 에 도달한다. 그래서 만약 어떤 점.. 2022. 10. 29.
유한체에서 정의된 타원곡선 덧셈 유한체에서 정의된 타원곡선 유한체에서 정의되었기 때문에 타원곡선 모양이 실수체에서 정의된것과 많이 다르다. 유한체 원소들은 연속적이지 않기 때문이다. 유일하게 관찰되는 패턴은, $y^2$ 항 때문에 y 축의 중간값(100) 을 지나는 수평축을 기준으로 대칭이다. 실수체에서의 곡선처럼 x 축으로 대칭도 아니다. 유한체에서 음수가 없기 때문이다. # 연습문제 3.1 prime = 223 a = FieldElement(0, prime) b = FieldElement(7, prime) def on_curve(x, y): return y ** 2 == x ** 3 + a * x + b print(on_curve(FieldElement(192, prime), FieldElement(105, prime))) prin.. 2022. 10. 29.
타원곡선 덧셈 타원곡선 위의 점 덧셈 기본원리는 아래 그림과 같다. 덧셈에 대한 모든 케이스는 아래 세가지로 나눠서 따져봐야한다. 1. 두 점이 x 축에 수직인 직선 위에 있는 경우 p1 = Point(-1, -1, 5, 7) p2 = Point(-1, 1, 5, 7) inf = Point(None, None, 5, 7) print(p1 + inf == p1) print(p2 + inf == p2) print(p1 + p2 == inf) def __add__(self, other): # None 은 무한원점을 의미한다. self 가 무한원점이면, other 를 리턴. ex) A(other) + I(self) = A if self.x is None: return other # other.x 가 무한원점이면, self 를.. 2022. 10. 29.
유한체 곱셈과 나눗셈 곱셈 유한체에서 닫혀 있는 덧셈 $+_f$ 을 정의했듯이 유한체에서 닫혀 있는 곱셈도 정의할 수 있다. 이를 이용하여 같은 숫자를 여러 번 곱하는 거듭제곱도 정의할 수 있다. 예를들어, 위수 19의 유한체 $F_{19}$ 에서 보면, $5 *_f 3$ = (5 * 3)%19 = 15 $8 *_f 17$ = (8 * 17)%19 = 3 곱셈 결과가 직관적이지 않다. 그러나 그 때문에 곱셈에 대해서 닫혀 있게 된다. 곱셈의 결과는 항상 집합 {0, 1, ...., p-1} 에 속하게 된다. 다시 말해 유한체 안에서 정의된 연산 결과는 항상 그 유한체 안에 속해야 한다. 그리고 유한체에서도 나머지 연산을 이용하여 거듭제곱 을 할 수 있다. $F_{19}$ 에서, $7^3$ = (7 * 7 * 7)%19 = 1.. 2022. 10. 24.
유한체 덧셈과 뺄셈 유한체에서의 덧셈을 정의할 때 그 결과가 여전히 유한체에 속해 있도록 해야 한다. 즉 수학 용어로 유한체에서 덧셈이 닫혀 있도록 해야 한다. 아래와 같이 19를 위수로 하는 유한체가 있다고 해보자. $F_{19} = {0, 1, 2, ... , 18}$ 여기에서 덧셈에 닫혀 있다는 뜻은 다음과 같다. $a +_f b \in F_{19}$ 일반 정수에서의 덧셈과 구별하기 위해 + 가 아닌 $+_f$ 로 표기한다. 나머지 연산을 사용하면 앞의 식이 항상 만족하는 것을 보장 할 수 있다. cf) 위수 p로 나머지 연산 $a +_f b$ = (a+b)%19 예를 들면, $7 +_f 8$ = (7+8)%19 = 15 $11 +_f 17$ = (11+17)%19 = 9 즉 우리만의 덧셈 연산을 만든거다. 뺏셈도 비.. 2022. 10. 13.