Bitcoin에서 사용되는 키 생성 알고리즘에 대하여
키생성 알고리즘 참고 : https://medium.com/@devAsterisk/비트코인에서-개인키-공개키-주소를-생성하는-방식-a5aa5a6ac77f
개인키는 비밀키라고도 하며, 256비트 길이의 램덤 생성된 숫자입니다. 보통 다음과 같이 64자리의 16진수로 표현됩니다.
1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD
개인키로 서명한 트랜젝션을 공개키로 검증하는 방식을 통해서 트랜젝션의 발생 주체를 검증하기 때문에, 개인키가 외부에 노출될 경우 타인이 임의로 생성한 트랜젝션에 유효한 서명을 할 수 있게 됩니다. 이말은 곧 해당 개인키로 통제되는 모든 자산을 잃을 수 있다는 것을 의미합니다.
비트코인은 개인키로부터 공개키를 생성하는데에 secp256k1이라는 표준에 정의된 타원 곡선과 상수 집합을 사용합니다.
Koblitz curve secp256k1 : Y² = X³ + 7
Koblitz 곡선 secp256k1의 도메인 파라메터 T = (p, a, b, G, n, h)는 아래와 같이 정의되어있습니다.
p : FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFC2F
a : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
b : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000007
G : 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
n : FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
h : 01
타원곡선을 이용하여 개인키로부터 공개키를 연산하는 과정에서 스칼라 곱 연산이 등장하는데, 여기서의 합 연산과 곱 연산은 우리가 아는 일반적인 그것과 다릅니다.타원곡선이 지니는 기하학적 성질을 이용하여 합 연산을 정의한 뒤, 그것의 n번 수행하는 것을 곱 연산으로 정의합니다. 물론 실제 연산을 위해서 대수식으로 표현하는 과정(= 대수기하)이 필요합니다.이 부분은 아무리봐도 쉽게 설명할 순 없을거같고,자세한 연산과정을 알고 싶으신 분들은 제가 참고했던 Elliptic Curve Cryptography: a gentle introduction 를 읽어보시는걸 추천드립니다.