Duress Wallet은 누군가 비트코인 접근 권한을 넘기라고 강요할 때 보여 주기 위해 미리 준비하는 지갑입니다. 구현에 따라 특별한 PIN이나 다른 passphrase, 즉 추가 비밀 문구로 열립니다. 주 지갑 대신 이 지갑의 접근 권한을 드러내려는 것입니다. 다만 그 안의 비트코인은 진짜이며 실제로 쓸 수 있습니다. 이 기능은 그때 공개하는 접근 범위를 제한할 수 있지만, 상대가 표시된 잔액을 믿거나 위협을 멈추리라는 보장은 하지 않습니다.
지갑은 비트코인을 받고 보내는 앱이나 기기입니다. 개인 키는 비트코인 지출을 승인하는 데 쓰는 비밀 숫자입니다. 페터가 주로 저축하는 지갑 외에 강압 상황에 대비한 지갑을 따로 준비했다고 해 봅시다. 지원 기기에서 특별한 PIN을 입력하면 두 번째 지갑만 열릴 수 있습니다. 그 지갑의 키로 결제에 서명할 수 있게 됩니다. 이 모드에서는 주 지갑에 접근할 수 없습니다. 하지만 가상의 금액을 표시하는 가짜 화면은 아닙니다. 두 번째 지갑에서 보내는 지급도 비트코인 네트워크에 정상적으로 전달됩니다. Duress Wallet이라는 이름만으로는 키를 어떻게 만들었는지, PIN이 다른 동작까지 실행하는지 알 수 없습니다. 페터는 메뉴 이름보다 기기의 정확한 동작을 이해해야 합니다. [1] [6] [7]
PIN은 보통 키를 보호하는 기기인 Hardware Wallet의 잠금을 풉니다. BIP39 passphrase의 역할은 다릅니다. 단어로 된 백업인 Seed Phrase와 함께 seed, 즉 키를 만드는 출발 데이터의 계산에 쓰입니다. passphrase에 오타가 있어도 입력으로 받아들이므로 보통은 다른 빈 지갑이 열립니다. BIP39는 계산 전에 정규화를 통해 문자 표현을 통일합니다. 원래 지갑으로 돌아가려면 올바른 백업과 원래 passphrase가 필요하며, Trezor가 대신 복구해 줄 수는 없습니다. 따라서 passphrase를 바꾸는 것은 이메일 비밀번호를 바꾸는 것과 다릅니다. 비트코인이 새 지갑으로 옮겨 가지 않기 때문입니다. passphrase를 지원한다고 특별한 Duress PIN까지 지원하는 것도 아닙니다. [2] [3]
상대가 페터의 주 지갑을 이미 보았거나 주소를 알고 있다면, 다른 화면에 더 적은 잔액을 보여 주어도 그 지식은 사라지지 않습니다. BIP39는 여러 유효한 지갑을 만들 수 있게 하지만 다른 지갑이 없다는 증거는 아닙니다. COLDCARD는 한 서명자의 지출 규칙을 설정하는 SSSP를 설명하면서 이를 보여 줍니다. 주 PIN을 아는 사람은 XPUB, 즉 관련 주소와 잔액을 살펴볼 수 있는 확장 공개 키를 내보낼 수 있습니다. XPUB만으로 지급에 서명하지는 못해도 정보는 알아낼 수 있습니다. 구매 기록이나 이전에 앱에 접근한 이력도 영향을 줍니다. 다만 블록체인에서 거래가 연결된다는 사실만으로 소유자의 신원이 입증되는 것은 아닙니다. [2] [5]
어떤 Trick PIN은 다른 지갑만 열고, 어떤 것은 비밀 정보를 지우거나 기기를 영구적으로 사용할 수 없게 만듭니다. 결과가 서로 다릅니다. 비트코인 출력, 즉 지출 조건과 연결된 금액은 블록체인에 계속 기록되어 있습니다. 완전한 백업이 있으면 다른 기기로 접근할 수 있는 경우가 있습니다. 사용할 수 있는 키의 유일한 사본을 잃으면 소유자 자신도 접근 권한을 잃을 수 있습니다. 데이터를 지워도 위협하는 사람의 반응을 통제할 수는 없습니다. 따라서 이 기능의 설명은 위험한 상황에서 실행하라는 조언이 아닙니다. [1] [6]
페터에게는 “예비 PIN”이라고 적어 두는 것만으로 충분하지 않습니다. 주 지갑과 별도 지갑을 각각 어떤 정보로 복구하는지 알아야 합니다. Seed Phrase, 필요한 경우 passphrase, 그리고 구현에서 요구하는 파생 매개변수입니다. 백업 단어만으로는 잊은 BIP39 passphrase를 대신할 수 없습니다. 별도의 테스트 데이터로 연습할 때는 알고 있는 수신 주소를 비교하고 재시작 후 어떤 지갑이 열리는지 확인해야 합니다. 앱에서 유효한 지갑 하나가 열린다고 의도한 지갑이 복구되었다는 뜻은 아닙니다. 실제 지갑의 유일한 백업에 파괴적인 기능을 시험해서는 안 됩니다. [3] [4]
꺼진 기기를 도난당한 경우, 백업을 도난당한 경우, 사람에게 직접 강압이 가해진 경우는 각각 다릅니다. 상대가 가진 정보와 능력도 다릅니다. Duress Wallet은 직접 키를 관리하는 Self-custody를 신중하게 설계할 때 한 요소가 될 수 있지만, 언제나 통하는 대응 시나리오는 없습니다. 별도 지갑에 넣을 금액에도 기술적으로 안전하다고 입증할 수 있는 액수는 없습니다. 자신의 안전과 가까운 사람들, 복구 가능성, 자신의 실수 위험까지 고려해야 합니다. 기기를 시험하면 소프트웨어의 동작을 알 수 있을 뿐, 공격자의 미래 행동을 예측할 수는 없습니다. 그래서 EFF는 구체적인 위협을 바탕으로 안전 계획을 세우고 정기적으로 다시 평가하도록 설명합니다. [6] [5]
BIP85에서는 하나의 주 비밀 정보 집합으로 다른 지갑들을 반복해서 다시 만들 수 있습니다. 출발점은 BIP32 마스터 확장 개인 키로, 개인 키에 다른 키를 파생하는 데 필요한 데이터를 더한 것입니다. 계산은 모든 단계가 hardened인 경로를 거치며, 각 단계에 개인 키 정보가 필요합니다. 그 결과를 키가 있는 해시 함수인 HMAC으로 처리합니다. 이 계층에서 파생된 지갑을 자식, 공통 출발점을 뿌리라고 합니다. 자식에서 뿌리를 역산할 수 없도록 설계되어 있지만, 뿌리와 필요한 매개변수를 얻은 사람은 자식들을 다시 만들 수 있습니다. 따라서 주소가 별개라고 백업까지 독립적인 것은 아닙니다. 공통 뿌리에서 파생한 지갑, 다른 passphrase를 쓰는 지갑, 실제로 독립적인 seed를 가진 지갑을 구별해야 합니다. 복구에는 올바른 경로와 특정 자식을 선택하는 번호인 index도 중요합니다. [4]
COLDCARD 문서는 주 seed를 지우지 않는 Duress Wallet과, 주 seed를 지운 다음 선택한 지갑을 여는 Wipe → Wallet을 구분합니다. 세 가지 BIP85 방식과 예전 Legacy Wallet이 나옵니다. 주 단어 백업이 24개 단어이면 BIP85 방식의 index는 1001–1003이고, 12개 단어이면 2001–2003입니다. Legacy 경로는 m/2147431408h/0h/0h이며 h는 hardened 단계를 나타냅니다. 이는 특정 구현의 정보이지 비트코인 합의 규칙은 아닙니다. 다른 기기나 firmware, 즉 기기 내부 소프트웨어의 다른 버전이 비슷한 이름만으로 똑같이 동작한다고 가정할 수 없습니다. 복구할 때도 정확한 모드를 알아야 합니다. [1]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 BIP85, BIP39 passphrase, Hardware Wallet, 자기 수탁, Secure Element, Seed Phrase.