용어집 / 프로토콜과 업그레이드
Schnorr 서명
별칭은 BIP340입니다.
- Schnorr 서명이란 무엇입니까?
- Schnorr 서명은 비트코인이 Taproot와 함께 도입한 64바이트 서명 방식이며, 이 방식의 결정적인 특성은 선형성입니다. 즉 여러 개의 키와 서명이 하나로 더해집니다.
BIP-340에 명시되어 있습니다.
ECDSA 서명은 71바이트 또는 72바이트이며 서로 결합할 수 없습니다. Schnorr 서명은 항상 64바이트이며 결합할 수 있습니다. 두 명의 서명자, 나아가 열다섯 명이 하나의 공개 키로 검증되는 하나의 서명을 만들어내면서도 온체인에는 서명자가 몇 명이었는지 드러나지 않는 이유가 이 차이입니다. 비트코인은 2020년 1월에 만들어져 블록 709,632부터 효력을 갖는 BIP-340에서 이 방식을 받아들였습니다.
작동 방식
이 방식은 비트코인이 지금까지 사용해 온 것과 동일한 타원 곡선인 secp256k1과 동일한 개인 키를 사용합니다. 달라지는 것은 이들을 둘러싼 대수학입니다.
서명하려면 비밀 논스를 선택하고 그 논스가 생성하는 점을 R로 공개한 뒤, 논스와, R·공개 키·메시지의 해시와, 자신의 개인 키로부터 하나의 수 s를 계산합니다. 서명은 R과 s를 각각 32바이트로 기록한 것이며, 고정된 64바이트 길이는 여기서 나옵니다. 검증은 같은 방정식을 재배열하여 두 점이 일치하는지 확인합니다. ECDSA는 이 과정 중간에 모듈러 역원 연산이 필요하지만 Schnorr에는 필요하지 않으며, 이 역원 연산이 빠져 있다는 점이 전체가 선형성을 유지하는 이유입니다.
선형성이 실질적인 이점입니다. 개인 키 두 개를 더하면 그 합은 두 공개 키의 합에 대한 서명이 되므로, 한 집단이 이들 사이에 하나의 겉보기 키를 가질 수 있습니다. 일괄 검증도 가능하게 합니다. 블록을 검증하는 노드는 수백 개의 서명을 하나씩이 아니라 하나의 집계 연산으로 확인할 수 있으며, 이는 초기 블록 다운로드 중에 가장 중요합니다.
BIP-340의 두 가지 세부 사항은 위험한 실수를 막기 위해 존재합니다. 공개 키는 x-only이며 y 좌표가 암시된 32바이트로, 예전에 같은 키의 두 가지 인코딩이 만들어내던 모호성을 제거합니다. 그리고 모든 해시는 도메인 문자열이 앞에 붙는 태그된 해시이므로, 한 용도로 만들어진 서명이 비슷한 바이트를 해시하는 다른 프로토콜에서 유효한 것으로 재사용될 수 없습니다.
논스는 여전히 위험한 부분입니다. 서로 다른 두 메시지에 논스 하나를 재사용하면 ECDSA에서와 똑같이 간단한 산술로 개인 키가 노출되며, 그래서 BIP-340은 선택을 구현자에게 맡기지 않고 선택적 보조 난수를 섞은 결정적 유도를 명시합니다.
이 모든 것이 2009년에 등장하지 않은 데에는 이유가 있습니다. Claus Schnorr는 이 방식에 대한 미국 특허 4,995,082를 보유했으며, 이 특허는 비트코인 백서가 나오기 몇 달 전인 2008년 2월에야 만료되었습니다. 당시 ECDSA가 특허에 얽매이지 않은 표준이었으므로 비트코인은 두 번째로 좋은 선택으로 출시되었고, 이를 바로잡기까지 12년을 기다렸습니다.
비트코인을 구매할 때 이것이 중요한 이유
키 하나를 쓰는 지갑에서는 그 효과가 반올림 오차에 불과하지만, 상당한 금액을 보호하는 사람에게는 비트코인이 추가한 암호학 중 가장 유용한 것입니다.
먼저 여러 기기에 코인을 보관하는 비용부터 보겠습니다. 2-of-3 구성은 예전 방식으로 사용하면 모든 트랜잭션에 서명 두 개와 공개 키 세 개를 공개하므로, 자금을 옮길 때마다 전체 정책에 대한 비용을 지불합니다. Taproot를 통해 협력적으로 사용하면 서명 하나만 공개되고 나머지 키는 나타나지 않습니다. 소액을 통합하면 절감 효과가 누적되며, 장기 보유자가 결국 하는 일이 바로 그것입니다.
다음은 프라이버시에 미치는 영향이며, 이쪽이 더 큽니다. 체인 분석 업체는 주소를 형태로 분류하며, 멀티시그는 항상 눈에 띄는 형태였습니다. 이 사이트에서 리뷰하는 하드웨어 지갑은 이런 구성에서 공동 서명자 역할을 할 수 있으며, Taproot 이전에는 제대로 자신을 보호하는 행위 자체가 관찰자에게 보호할 가치가 있는 무언가가 있다고 알려 주었습니다. 협력적 Schnorr 사용은 아무것도 약화시키지 않으면서 그 단서를 없앱니다.
상속 계획에서는 계산이 달라지기도 합니다. Taproot 트리에서 사용하지 않는 분기는 비용이 들지 않으므로, 가족 구성원을 위한 시간 지연 복구 경로를 추가해도 평소 사용할 때마다 비용을 지불하지 않습니다. 이는 진정으로 새로운 선택지이며, 설계하기 전에 이 사이트의 보안 가이드를 읽어 보시는 것이 좋습니다. 교묘한 수탁 방식의 실패 양상은 강탈당하는 것이 아니라 접근 권한을 잃는 것이기 때문입니다.
MuSig2: 서명자 둘, 서명 하나
BIP-327로 표준화된 MuSig2는 선형성을 지갑이 실제로 사용할 수 있는 것으로 바꾸는 프로토콜입니다.
공개 키를 단순히 더하는 것은 안전하지 않습니다. 한 참가자가 자신의 키를 발표하기 전에 다른 모든 참가자의 키를 알게 되면, 다른 키들을 상쇄하는 키를 만들어 혼자 서명할 수 있게 됩니다. 이것이 로그 키 공격이며, MuSig2는 각 키에 전체 집합에서 유도된 계수를 부여하여 이를 막으므로 어떤 참가자도 자신의 키를 마음대로 고를 수 없습니다.
서명 과정은 두 라운드입니다. 각 당사자가 논스 약정을 보내고, 그다음 각 당사자가 부분 서명을 보내며, 부분 서명들이 합쳐져 집계 키 아래의 유효한 Schnorr 서명 하나가 됩니다. 두 라운드가 중요한 이유는 첫 번째 라운드를 미리 할 수 있기 때문이며, 서명이 끊임없이 교환되는 라이트닝 채널에서 이 방식을 쓸 수 있게 하는 것이 바로 이 점입니다.
온체인에 남는 것은 키 경로 출력 하나를 사용하는 64바이트 서명 하나입니다. 협력적 2자 사용은 약 57.5v바이트로, 다른 어떤 입력 유형보다 적으며 관찰자는 한 사람이 승인했는지 위원회가 승인했는지 알 수 없습니다.
Schnorr 서명 vs 서명
비트코인에서 그냥 “서명”이라고 하면 여전히 보통 ECDSA를 뜻하며, 두 방식 모두 일상적으로 사용됩니다. 1, 3 또는 bc1q로 시작하는 주소에 있는 코인은 2010년과 똑같이 ECDSA로 사용됩니다. bc1p 주소에 있는 코인은 Schnorr로 사용됩니다. 두 종류를 모두 보유한 지갑, 즉 어느 정도 이력이 있는 대부분의 지갑은 별말 없이 같은 세션에서 두 종류의 서명을 모두 만들어냅니다. 비트코인이 ECDSA를 쓴다며 거기서 끝이라고 말하는 사람은 2021년 11월 이전의 프로토콜을 설명하고 있는 것입니다.
Schnorr 서명 vs MuSig2
Schnorr는 서명 방식이고, MuSig2는 그 위에 구축된 하나의 프로토콜입니다. 키 하나로 Schnorr를 영원히 사용하면서 MuSig2를 전혀 건드리지 않을 수 있으며, 오늘날 모든 일반적인 Taproot 지갑이 그렇게 합니다. MuSig2는 여러 당사자가 하나처럼 보이고자 할 때만 등장하며, 같은 성질 위에 구축된 유일한 선택지도 아닙니다. 서명자 한 명의 부재를 견디는 임계값 방식과, 원자적 교환 및 라이트닝에 사용되는 어댑터 서명은 같은 선형성에 기반한 별개의 구성입니다.