용어집 / 개발자 참고 자료
점 함수
- 점 함수란 무엇입니까?
- 점 함수는 secp256k1의 생성점에 개인 키를 곱하여 개인 키를 공개 키로 바꾸며, 모든 비트코인 주소가 기반으로 삼는 단방향 단계입니다.
BIP-32에 명시되어 있습니다.
BIP32는 이 연산에 point(p)라는 이름을 붙였는데, 계층적 키 유도가 거의 모든 줄에서 이를 언급하기 때문입니다. 곡선의 고정된 생성점에 256비트 비밀값을 곱하면 안전하게 공개할 수 있는 좌표 쌍이 나옵니다. 그 좌표 쌍에서 비밀값을 복원하려면 78자릿수 공간에서 이산 로그를 푸는 것과 같습니다. 지갑은 주소마다 이 함수를 한 번 실행하며, 결코 거꾸로 실행할 필요가 없습니다.
작동 방식
점 함수는 두 입력 중 하나가 영구히 고정된 타원 곡선 곱셈입니다.
비트코인은 secp256k1 곡선을 사용합니다. 이 곡선은 큰 소수 체 위에서 y의 제곱이 x의 세제곱 더하기 7이라는 방정식으로 정의되며, NIST가 아니라 SEC 2 문서에서 표준화되었습니다. 이 곡선에는 모든 구현이 하드코딩하는 생성점 G가 있고, 값이 2의 256제곱 바로 아래에 있는 군 위수 n도 있습니다. 개인 키는 1부터 n 빼기 1까지의 임의의 정수입니다. 이 함수는 배증과 덧셈 사다리를 사용해 G를 그 횟수만큼 자기 자신에 더하며, 우주의 나이가 아니라 1밀리초보다 훨씬 짧은 시간에 끝납니다.
반대 방향이 보안 가정의 전부입니다. 결과 점이 주어졌을 때, 공개된 어떤 방법도 군 크기의 대략 제곱근보다 빠르게 승수를 복원하지 못하므로 작업량은 2의 128제곱 회 연산 정도입니다. 주소를 재사용하거나 공개하거나 수십 년 동안 보관해도 이 점은 바뀌지 않습니다.
한 가지 성질이 계층적 지갑을 가능하게 합니다. 점 곱셈은 덧셈에 대해 분배되므로, a 더하기 b의 점은 a의 점에 b의 점을 더한 것과 같습니다. 개인 키에 트윅을 더하면 대응하는 공개 키는 그 트윅의 점만큼 이동하며, 이 값은 키를 보유하지 않고도 누구나 계산할 수 있습니다. 비강화 BIP32 유도가 이 항등식에 기반하고, 스크립트 트리에 대한 커밋먼트로 이동한 내부 키인 Taproot 출력 키도 마찬가지입니다.
확인할 수 있는 곳
점 함수는 지갑이 새로운 수신 주소를 보여 줄 때마다 실행됩니다.
확장 공개 키가 그 자체로 유용한 이유도 여기에 있습니다. xpub을 온라인 상점이나 조회 전용 휴대전화에 넘기면, 그 기기는 공개 키에 트윅을 적용해 결제마다 새 주소를 생성할 수 있으며, 어디에도 개인 키가 존재하지 않습니다. 하드웨어 지갑은 같은 비대칭성을 반대편에서 활용합니다. 비밀값은 칩을 떠나지 않고 결과 점만 케이블로 돌아옵니다.
이 성질에는 위험한 이면이 있습니다. 관계가 덧셈적이고 공개적이므로, 확장 공개 키와 유출된 비강화 자식 개인 키 1개를 결합하면 누구든 부모 개인 키와 함께 전체 가지를 복원할 수 있습니다. 계정 수준 유도가 강화되는 이유이며, 유출된 xpub이 즉각적인 절도가 아니라 프라이버시에 대한 재앙인 이유입니다.
점 함수 vs 압축 공개 키
점 함수는 수학적 객체를 만들어 내고, 압축 공개 키는 그 객체를 적는 한 가지 방식입니다. 점은 각각 32바이트인 좌표 쌍입니다. 압축 형식은 y 좌표를 버리고 그것이 짝수였는지 홀수였는지를 기록하는 1바이트 접두사를 유지하여 33바이트가 됩니다. 비압축 형식은 두 좌표를 모두 65바이트에 걸쳐 적습니다. Taproot의 x 전용 형식은 32바이트를 유지하며 접두사가 전혀 없습니다. 이들 모두는 같은 점을 나타내지만, 각 인코딩은 서로 다른 주소로 해시됩니다. 그래서 잘못된 압축 플래그로 오래된 키를 가져오면 잔액이 0으로 표시되는 동안 코인은 다른 주소에 그대로 남아 있습니다.