용어집 / 주소와 키
공개 키
- 공개 키란 무엇입니까?
- 공개 키는 개인 키에서 유도된 secp256k1 곡선 위의 점으로서, 위험 없이 공개할 수 있으며, 코인을 사용할 때 서명을 검증하는 기준이 되는 값입니다.
개인 키에 곡선 위의 고정된 점을 곱하면 공개 키가 만들어지며, 알려진 어떤 방법으로도 이 단계를 거꾸로 되돌릴 수 없습니다. 압축 키는 33바이트를 차지하며, Taproot는 이를 BIP-340에 정의된 32바이트의 x-only 형식으로 더 줄였습니다. 사용자로서 공개 키를 직접 보는 일은 드뭅니다. 대부분의 주소는 키의 해시만 공개하고, 코인이 마침내 이동할 때에야 키 자체를 드러내기 때문입니다.
작동 방식
공개 키는 하나의 특정한 곡선에서 나오며, 그 곡선의 연산이 모든 일을 합니다. 비트코인은 큰 소수 체 위에서 y의 제곱이 x의 세제곱 더하기 7이라는 방정식으로 정의되고, 생성자라고 불리는 합의된 시작점을 함께 쓰는 secp256k1을 사용합니다. 그 생성자를 개인 키가 말하는 횟수만큼 자기 자신에게 더하면 곡선 위의 또 다른 점이 생기고, 그 점이 공개 키입니다. 이 연산은 한 방향으로는 빠르지만, 오늘날 알려진 모든 기법을 동원해도 반대 방향으로는 실행이 불가능하며, 이것이 비트코인 소유권의 전적인 기반입니다.
실제로는 세 가지 인코딩이 나타납니다. 원래의 비압축 형식은 0x04 접두사 뒤에 두 좌표를 모두 적는 데 65바이트를 씁니다. 압축 형식은 x 좌표와 패리티 바이트만 유지하여 총 33바이트이며, 10년이 훨씬 넘도록 기본값입니다. Taproot는 정확히 32바이트의 x-only 키로 한 단계 더 나아가는데, BIP-340이 대신 규약을 정해 두었기 때문에 패리티 바이트를 뺍니다.
키가 온체인 어디에 나타나는지는 출력 유형에 따라 다릅니다. 레거시 또는 SegWit 버전 0 출력은 공개 키의 20바이트 해시에 커밋하므로, 체인에는 코인이 사용될 때까지 해시 외에는 아무것도 보이지 않으며, 사용 시점에 지출하는 사람은 그 해시에 대응하는 키를 드러내야 합니다. Taproot 출력은 다릅니다. 32바이트 출력 키가 주소 자체에 들어 있어, 자금이 도착하는 순간부터 보입니다.
비트코인을 구매할 때 이것이 중요한 이유
평범한 구매자 앞에 공개 키가 등장하는 실용적인 상황은 두 가지이며, 둘 다 틀리기 쉽습니다.
첫째는 주소가 본인 것임을 증명하는 경우입니다. EU 자금 이체 규정에 따라, 거래소는 자기 보관 주소로 1,000 유로를 넘게 보내기 전에 그 주소가 실제로 고객의 것인지 확인해야 하며, 이 사이트의 국가별 가이드에서 다루는 여러 다른 관할권에서도 비슷한 확인이 적용됩니다. 표준적인 증명은 서명된 메시지입니다. 지갑이 주소 뒤에 있는 키로 챌린지에 서명하면, 거래소가 공개 키로 이를 검증합니다. 비밀스러운 것은 아무것도 기기 밖으로 나가지 않으므로, 이 요청은 키 자체를 요구하는 요청과 달리 응해도 안전합니다.
둘째는 지갑이 내보낼 수 있는 확장 공개 키, 곧 xpub입니다. xpub는 지출 자격 증명이 아니며, 이를 건네도 코인을 직접 잃을 수는 없습니다. 대신 재무 이력을 넘겨줍니다. xpub를 가진 사람은 그 지갑이 지금까지 사용했고 앞으로 사용할 모든 주소를 생성하고, 그 주소들에 붙은 잔액과 모든 거래를 읽을 수 있습니다. 포트폴리오 추적기, 세무 도구, 회계사는 xpub를 일상적으로 요청합니다. 평생의 은행 거래 내역을 건네도 괜찮을 곳에서만 xpub를 내주시고, 그렇지 않은 곳에서는 별도의 계좌나 지갑을 사용하십시오.
키를 따라 블록체인으로
표준 네이티브 SegWit 경로인 m/84'/0'/0'/0/0을 쓰는 지갑을 예로 들겠습니다. 그 경로의 키는 33바이트짜리 압축 키입니다. 지갑은 이 키를 먼저 SHA-256으로, 그다음 RIPEMD-160으로 해시하여 20바이트를 만들고, 그 바이트를 bc1q 주소로 인코딩합니다. 이제 그 주소로 보낸 모든 것은 해시에 잠기며, 네트워크는 키를 본 적이 없습니다.
사용할 때 위트니스 필드는 두 항목을 담습니다. 서명과 33바이트 공개 키입니다. 모든 노드는 키를 해시하고, 그 결과가 출력이 요구한 20바이트와 일치하는지 확인한 다음, 키로 서명을 검증합니다. 두 가지가 모두 성립할 때만 지출이 유효합니다. 그 블록부터 키는 공개되므로, 이미 사용한 적이 있는 주소에 잔액을 두지 않을 좋은 이유가 됩니다.
공개 키 vs 개인 키
개인 키는 무작위로 선택되고 공개 키는 그로부터 계산되며, 결코 그 반대가 아닙니다. 이 비대칭성이 각각을 다루는 방식을 결정합니다. 공개 키를 공개하는 것은 일상적인 일이고 아무 비용도 들지 않지만, 개인 키를 공개하면 코인을 즉시, 되돌릴 수 없이 넘겨주게 됩니다. 공개 키는 언제나 개인 키로부터 마이크로초 단위로 다시 계산할 수 있으므로, 백업은 개인 쪽을 보호합니다. 검증은 공개 쪽을 사용하며, 그래서 낯선 이와 노드가 아무것도 신뢰받지 않고도 이용자의 서명을 확인할 수 있습니다.