뉴스

비트코인 멀티시그 백업 표준 BIP138 — 시드만으론 못 찾아요

멀티시그 지갑은 시드 24단어만 있어도 코인을 못 찾을 수 있어요. 지갑 구조를 적은 디스크립터가 필요한데, 이걸 암호화해서 클라우드에 둘 수 있게 만든 BIP138 초안이 9월 21일 비트코인 BIP 저장소에 들어갔어요.

비트코인 멀티시그 백업 표준 BIP138 — 시드만으론 못 찾아요

3줄 요약

  • 1BIP138 은 지갑 디스크립터와 정책을 암호화해서 백업하는 규격이에요. 9월 21일 비트코인 BIP 저장소에 초안(Draft)으로 들어갔어요.
  • 2암호를 푸는 열쇠가 디스크립터에 들어 있는 공개키들이에요. 공동 서명자라면 자기 xpub 만으로 백업을 열 수 있고, 개인키는 백업에 넣지 않아요.
  • 3렛저·트레저 데스크톱 앱처럼 계정 xpub 을 서버로 보내는 앱의 xpub 을 멀티시그에 다시 쓰면, 그 서버가 백업을 열 수 있다고 규격이 직접 경고해요.

AI가 쓴 글이에요. 출처를 바탕으로 자동으로 작성·발행돼요. 사람이 검수하지 않으니 사실과 다를 수 있어요. 중요한 내용은 아래 출처 링크에서 원문을 확인해 주세요.

멀티시그 지갑은 시드 24단어를 다 적어 뒀어도 코인을 못 찾을 수 있어요. 어떤 공개키들을 몇 개 모아야 쓸 수 있는 지갑인지 적어 둔 디스크립터가 따로 있어야 하거든요. 이 디스크립터를 암호화해서 클라우드 같은 남의 저장소에 올려 두게 만든 BIP138 초안이 9월 21일 비트코인 BIP 저장소에 들어갔어요.

시드만 있으면 된다는 오해

시드 구문은 서명할 권한을 주는 열쇠예요. 그런데 내 코인이 어디 있는지 알려 주지는 않아요. 그 역할을 하는 게 디스크립터(Descriptor) — 어떤 공개키와 스크립트, 어떤 조건으로 돈을 쓸 수 있는지 적은 설명서예요.

혼자 쓰는 단일서명 지갑은 시드에서 디스크립터를 다시 만들 수 있어요. 멀티시그는 그게 안 돼요. 내 키 하나만으로는 나머지 공동 서명자의 공개키를 알 수가 없거든요.

BIP138 문서는 이렇게 표현해요. 디스크립터를 잃는 건 시드를 잃는 것과 거의 같다고요. 3명 중 2명이면 복구되게 설계해 둔 지갑도, 잃어버린 한 사람의 공개키까지 같이 사라지면 코인에 손을 못 대게 돼요.

종이에 적기도, 클라우드에 올리기도 어려웠어요

지금까지 디스크립터 백업은 어느 쪽을 골라도 걸리는 데가 있었어요.

방법문제
종이·금속판에 적기디스크립터가 시드 24단어보다 훨씬 길어요. 손으로 옮기다 틀리기 쉬워요
USB·외장 저장장치시간이 지나면 데이터가 상해요. 물·불에는 버티지 못해요
클라우드에 그냥 올리기내 공개키와 스크립트 구조가 그대로 드러나요

BIP138 이 노리는 자리가 세 번째 줄이에요. 남의 서버에 여러 벌 올려 두면서도 내용은 안 보이게 하는 거예요.

공개키로 잠그고, 공개키로 풀어요

암호를 푸는 열쇠를 따로 만들지 않는 게 이 규격의 핵심이에요. 디스크립터에 들어 있는 공개키들을 사전 순서대로 줄 세워 해시한 값이 그대로 암호 열쇠가 돼요.

그래서 공동 서명자는 자기 xpub(확장 공개키)만 있으면 백업을 열 수 있어요. 새로 외울 비밀번호가 없어요. 하드웨어 지갑에서 개인키를 꺼내지 않아도 돼요. 반대로 그 지갑의 참여자가 아니면 못 열어요.

암호 알고리즘은 ChaCha20-Poly1305(RFC 8439)를 써요. 비트코인 코어가 P2P 통신 암호화(BIP324)에 이미 쓰는 방식이라 라이브러리 구하기가 쉽고, 하드웨어 지갑처럼 성능이 약한 기기에서도 돌아가요.

개인키는 절대 넣지 말라고 규격에 못 박아 뒀어요. 공개키로 열리는 상자라서, 개인키를 넣으면 공개키만 아는 사람이 개인키를 가져갈 수 있어요.

파일 크기와 참여자 수까지 감춰요

암호화만 하면 내용은 가려지지만, 파일을 보고 짐작할 수 있는 게 남아요. BIP138 은 그 틈도 막아 놨어요.

  • 지문(fingerprint)을 평문으로 안 적어요. 적으면 참여자가 누구인지 단서가 돼요.
  • 가짜 열쇠 조각을 섞어요. 실제 공동 서명자가 2명이어도 조각 개수를 5개, 10개, 20개 같은 칸으로 올려 채워요. 몇 명짜리 지갑인지 세지 못하게 하는 거예요.
  • 파일 크기를 칸에 맞춰 늘려요. 10KiB 이하는 10KiB 로 채워요. 거래가 생길 때마다 백업을 새로 올리는 지갑은 파일 크기 변화만으로 활동이 드러나거든요.

조심할 점 — 앱에 넘긴 xpub

규격이 직접 경고하는 대목이 하나 있어요. xpub 은 블록체인에 안 올라가도 남이 알 수 있어요.

렛저(Ledger)와 트레저(Trezor) 데스크톱 앱 같은 단일서명 지갑은 계정 xpub 을 서버로 보내요. 서버가 그 xpub 에서 주소를 뽑아 잔액을 보여 주는 구조예요. 단일서명으로 쓸 때는 서버가 이미 아는 정보라 큰 문제가 없어요.

문제는 그 xpub 을 멀티시그 디스크립터에 다시 쓸 때예요. 그러면 그 서버는 이 멀티시그의 백업을 전부 열 수 있어요. 열어도 돈을 옮기지는 못하지만, 참여자 수와 스크립트 구조는 보게 돼요.

규격의 권고는 이래요. 멀티시그는 서버에 xpub 을 보낸 적 없는 계정으로 만들라는 거예요. BIP48 이나 BIP87 경로에서 뽑은 계정이 그런 계정이에요.

같은 이유로, 블록체인에 그대로 찍히는 형태의 키는 암호 열쇠에서 빼요. 한 번 쓴 거래만 봐도 열쇠를 되짚어 계산할 수 있으니까요.

아직 초안이에요

BIP138 의 상태는 초안(Draft)이에요. 네트워크 규칙이 아니라 지갑 앱이 골라서 따르는 규격이고, 내 지갑에 자동으로 적용되지도 않아요. 문서 버전은 0.1.3, 작성자는 와이자드사딘(Wizardsardine)의 개발자 Pyth 예요.

지금 멀티시그를 쓰는 분이라면 표준을 기다릴 일은 아니에요. 디스크립터를 시드와 따로, 지금 쓰는 방식으로 한 벌 더 챙겨 두는 게 먼저예요.

정리

  • 멀티시그 지갑은 시드 말고 디스크립터도 백업해야 해요. 없으면 내 키가 있어도 코인을 못 찾아요.
  • BIP138 은 그 디스크립터를 암호화해서 클라우드에 둘 수 있게 만든 초안이에요. 공동 서명자는 자기 xpub 만으로 열 수 있고, 개인키는 넣지 않아요.
  • 렛저·트레저 데스크톱 앱에 넘긴 계정 xpub 을 멀티시그에 재사용하면 그 서버가 백업을 열 수 있어요.

다음에 할 일 한 가지 — 멀티시그를 쓰고 있다면 지갑 앱에서 디스크립터를 내보내(export) 시드와 다른 곳에 한 벌 보관해 보세요.

출처 (3개)

이 글은 아래 출처를 바탕으로 작성됐어요

함께 보면 좋아요

코인풀이 텔레그램 소통방

차트 공부부터 실시간 분석까지, 같이 이야기해요. 새 글도 여기 가장 먼저 올라가요.