다중 서명
비트코인의 개인키는 돈을 움직일 수 있는 열쇠입니다. 열쇠가 하나뿐이면 개인키와 이를 복원할 복구 단어·백업을 모두 잃었을 때 돈이 영영 잠기고, 개인키가 도난당했을 때는 누군가 돈을 가져갈 수 있습니다. 재발급 창구나 거래 취소 절차도 없습니다.
다중 서명은 이런 위험을 줄이기 위해 열쇠 여러 개를 나누어 두고, 그중 정해 둔 개수 이상이 서명해야 비트코인이 움직이도록 잠그는 방식입니다. 열쇠 여러 개로 잠그는 금고와 같습니다. 열쇠 하나만으로는 열리지 않습니다.
열쇠를 나누어 두는 원리
예를 들어 열쇠 구멍이 세 개 있는 금고에 열쇠 세 개를 만들고, 그중 두 개만 있으면 열리도록 설정할 수 있습니다. 하나는 직접 보관하고, 하나는 믿을 만한 가족에게 맡기며, 나머지 하나는 멀리 떨어진 보관함에 둘 수 있습니다.
이렇게 하면 도둑이 훔친 열쇠 한 개만으로는 금고를 열 수 없습니다. 반대로 2-of-3 구성에서는 열쇠 하나를 잃어버려도 남은 두 개를 모으면 돈을 움직일 수 있습니다. 다만 2-of-2처럼 두 개 모두가 필요한 구성에서는 한 키를 잃으면 지출할 수 없습니다. 일반적으로 n개 중 m개의 키가 필요한 구성은 최대 n−m개의 키 손실을 감당할 수 있지만, 실제 복구에는 서명 장치 구성 정보도 필요합니다.
다중 서명의 조건은 서명 장치와 출력 구성을 설계할 때 정해 둡니다. 주소를 생성하는 행위 자체가 장부에 조건을 기록하는 것은 아닙니다. 자금을 받을 때는 주소 유형에 따라 잠금 조건 전체 또는 그 조건을 식별하는 값이 거래 출력에 기록됩니다. 예를 들어 P2SH·P2WSH 구성에서는 잠금 조건인 스크립트 자체가 아니라 그 해시를 출력에 기록하고, 나중에 지출할 때 해당 스크립트와 필요한 서명을 제시해 조건을 검증합니다.
서명 장치는 개인키를 관리하고 그 키로 거래에 서명하는 도구입니다. 돈을 보내려면 송금 내용을 담은 거래에 각 키 보유자가 자신의 서명을 추가해야 합니다. 정해 둔 수의 서명이 조건에 맞게 모인 거래만 유효합니다. 다른 사람의 개인키가 없으면 그 키에 해당하는 서명을 대신 만들 수는 없습니다. 네트워크에 참여한 컴퓨터들은 이 조건을 확인하고, 서명이 부족한 거래는 받아들이지 않습니다.
필요한 서명 수를 정하는 방법
열쇠 수와 필요한 서명 수는 상황에 맞게 정할 수 있습니다.
- 세 개 가운데 두 개가 필요한 방식
- 다섯 개 가운데 세 개가 필요한 방식
- 두 개 모두가 필요한 방식
열쇠를 많이 만들고 여러 장소에 나누어 둘수록 한 곳의 사고에는 강해질 수 있습니다. 그러나 관리해야 할 열쇠와 복구 절차가 늘어나므로 사용은 더 번거로워집니다. 열쇠를 한 서랍에 모두 넣어 두면 다중 서명의 장점을 충분히 살릴 수 없습니다.
여러 사람이 함께 관리할 때
다중 서명은 회사나 단체의 자금을 여러 사람이 관리할 때 유용합니다. 예를 들어 임원 세 명 가운데 두 명이 동의해야 자금이 움직이도록 설정하면, 한 사람의 실수나 변심만으로 돈이 빠져나가는 일을 막을 수 있습니다. 부부가 공동 저축을 함께 관리하는 방식에도 적용할 수 있습니다.
혼자 사용하는 경우에도 열쇠를 집과 직장, 멀리 떨어진 보관 장소에 나누어 두는 구성이 가능합니다. 예를 들어 2-of-3 구성에서는 한 곳이 털리거나 열쇠 하나를 잃어버려도 남은 두 열쇠로 지출할 수 있습니다. 다만 개인키만으로 충분하지 않을 수 있습니다. 전체 공개키, 파생 경로, 서명 임계값, 각 키의 식별 정보가 담긴 서명 장치 설정이나 출력 디스크립터 등 복구에 필요한 구성 정보도 백업하고, 실제로 복구 가능한지 미리 확인해야 합니다.
다중 전송과 다른 점
다중 서명과 다중 전송은 이름이 비슷하지만 뜻이 다릅니다.
다중 전송은 한 번의 거래로 여러 사람에게 돈을 보내는 기능입니다. 봉투 하나에 여러 장의 수표를 담아 보내는 것에 가깝습니다. 여기서 여러 개인 것은 받는 쪽, 즉 거래의 도착지입니다.
반면 다중 서명에서 여러 개인 것은 돈을 움직이는 데 필요한 열쇠와 서명입니다. 받는 사람의 수와는 관계가 없습니다. 다중 전송은 여러 곳으로 보내는 기능이고, 다중 서명은 여러 열쇠로 금고를 여는 방식입니다.
미니스크립트로 잠금 조건 다루기
영상은 비트코인에서 스마트 컨트랙트라는 말을 잘 쓰지 않는다며, 이더리움이 스크립트는 복잡하고 다양하게 무엇이든 할 수 있다고 주장하는 것과 달리 비트코인의 스크립트는 돈을 보내고 받는 기능에 최적화된 제한된 코드 조합이라고 설명합니다. 스크립트를 이루는 기본 연산자는 opcode라 부르며, 비트코인 코어에는 이런 규칙들이 자체에 코딩되어 있어 코어를 중심으로 동작하는 데는 문제가 없다고 합니다. 다만 외부 서드파티 애플리케이션이나 시스템을 만들 때는 복잡도가 높고 전부 날코딩이라 실수할 수 있고 구현도 어려웠다고 영상은 전합니다.
영상은 미니스크립트를 비트코인 스크립트를 더 안전하고 이해하기 쉽게 표현한 일종의 규칙으로 요약하고, 스크립트를 날것으로 그대로 쓰지 않도록 사용하기 쉽게 템플릿화한 것이라고 설명합니다. 원하는 조건을 정책 언어로 적은 뒤 미니스크립트를 거쳐 실제 비트코인 스크립트로 변환해 동작하는 흐름입니다. 가독성과 명확성이 개선되어 오류 가능성이 줄고, 조각으로 구성되어 복잡한 정책도 조각을 더하거나 둘 중 하나로 처리하는 식으로 단순하게 재구성하기 쉽다고 합니다. 서로 다른 서드파티 솔루션들이 같은 미니스크립트를 기준으로 기능을 구현하면 최종적으로 같은 비트코인 스크립트로 변환되므로 동작이 통일되고 여러 장치가 같은 조건을 같은 방식으로 이해하는 상호 운용성이 높아진다고 영상은 설명합니다. 정적인 분석으로 자금이 잠기는 것을 막고 자동으로 스크립트로 컴파일되기 때문에 개발과 운영 효율이 높아졌다고 덧붙입니다.
영상에 따르면 미니스크립트는 블록스트림 엔지니어들이 2018년 블록스트림 리서치에서 만들기 시작해 공식 발표했습니다. 활용 사례와 관련해서는 발언자가 자신이 아이디어를 직접 짠 것이 아니라 자료를 조합해 정리한 것이라고 밝힌 뒤, 상속 계획, 기업 자금 관리, 사이드체인 동적 연합 관리, 스마트 컨트랙트 기능 확장 등에 이미 활용되고 앞으로 점차 활용될 것으로 보인다고 전합니다.
발언자는 자신이 완전한 기술자나 개발자가 아니어서 제대로 설명하지 못한 부분이 있을 수 있다며, 기술을 잘 아는 사람이 댓글로 알려 주면 보완해 함께 공부하는 데 도움이 될 것이라고 말합니다.
다중 서명의 부담
다중 서명은 보안을 높일 수 있지만 비용과 관리 부담도 따릅니다. 거래에 여러 서명이 포함되므로 거래 데이터가 커지고, 보내는 데 드는 비용이 늘어날 수 있습니다. 열쇠 하나만 사용하는 방식보다 복구 절차도 복잡합니다.
따라서 열쇠를 서로 다른 장소와 사람에게 분산하는 것뿐 아니라, 필요한 서명 수와 복구 방법, 서명 장치 구성 정보의 백업까지 함께 설계해야 합니다.
개인키의 역할은 개인키에서 더 자세히 확인할 수 있습니다.
영상
원본 영상: 미니스크립트(Miniscript)가 뭔지 아는 사람 손? (공개일: 2025-09-18)