알아 둘 사항 : |
- Miniscript를 사용하면 백도어를 악용할 수 없도록 만드는 비트코인 소프트웨어 지갑을 구축할 수 있습니다. Ledger가 miniscript를 지원하는 최초의 상용 하드웨어 지갑 제조업체임을 알려드리게 되어 기쁩니다.
- 사용자 경험을 손상시키지 않고 추가 기능을 구현할 수 있습니다. |
하드웨어 서명 장치는 다음과 같은 다양한 일반적인 공격 벡터로부터 사용자를 보호하도록 설계되었습니다.
- 종자의 무단 액세스 및 추출
- 연결된 소프트웨어 지갑을 감염시키는 맬웨어
- 장치 자체의 소프트웨어 취약점
다른 비즈니스와 마찬가지로 장치를 다음과 같이 만드는 것이 제조업체의 최선의 이익입니다. 깨지지 않는 그들이 할 수 있는 한. 이 임무를 성공적으로 수행하는 것이 가장 중요하며 Ledger와 같은 보안 회사는 실적을 바탕으로 구축된 명성에 의존합니다.
그러나 일부 사용자는 여전히 우려할 수 있습니다. 회사 자체가 숨기는 것을 방지하는 것 뒷문 장치에서?
자가격리에서 우리는 믿지마, 우리는 확인.
하지만 사용자가 정말 장치에 백도어가 없는지 확인하시겠습니까?
이것이 이 기사에서 탐구하는 핵심 질문입니다. 보다 정확하게는 이 문서에서 다루는 주제는 다음과 같습니다.
- 백도어란 무엇이며 백도어가 없다는 것을 증명하는 것이 불가능하지는 않더라도 어려운 이유;
- 사용자만 이 위험으로부터 자신을 보호할 수 있는 이유;
- miniscript가 비트코인 지갑에 대한 이 문제에 대한 실용적인 솔루션을 가능하게 하는 방법.
지원하는 최초의 하드웨어 지갑이 됨으로써 미니 스크립트, 우리는 개발자가 안전한 솔루션을 구축하고 전체 산업을 업그레이드하도록 영감을 주고 이러한 시스템적 위험이 실현될 가능성을 제거하기를 희망합니다.
구축 방법 백도어 불가능 서명 장치
분명히 말씀드리자면 할 수 없습니다.
잠재적인 백도어로부터 자신을 방어하려면 위에서 설명한 것과는 다른 공격 모델이 필요합니다. 이 시나리오에서 상대는 공급업체 자체이거나 손상된 내부자일 수 있습니다.
이 문제에 대해 자주 언급되는 해결책은 오픈 소스입니다. 결국 코드를 검사할 수 있다면 무엇이 잘못될 수 있습니까?
그러나 진실은 더 복잡합니다. 공급업체가 하드웨어를 조립하기 때문에 백도어가 그 안에 완전히 포함될 수 있습니다. 특정 지점에서 소프트웨어를 무시하고 대신 악성 코드를 실행하도록 하드웨어를 설계할 수 있습니다.
노트북이나 휴대폰과 같은 범용 컴퓨팅 장치에서 실행되는 소프트웨어와 달리 하드웨어를 면밀히 조사하는 것은 오늘날의 기술로는 사실상 불가능합니다. 하드웨어 사양이 완전히 오픈 소스이고 회로의 모든 단일 게이트에 대한 세부 정보가 포함된 경우에도 특정 칩이 그에 따라 구축되었는지 확인하려면 여전히 고가의 장비가 필요합니다.
하드웨어 지갑을 백도어하는 방법
다음은 악성 하드웨어 공급업체가 백도어를 도입하는 데 사용할 수 있는 가장 간단한 몇 가지 방법과 오늘날 고급 사용자가 자신을 보호할 수 있는 몇 가지 방법입니다.
종자 생성
많은 장치에서 시드(또는 비밀 복구 문구)를 사용하여 장치에서 직접 진정한 난수 생성기.
😈 사악한 장치는 무작위로 보이지만 실제로는 공격자가 예측할 수 있는 시드를 생성할 수 있습니다.
🛡️ 고급 사용자는 오프라인에서 니모닉을 생성하여 이 문제를 피할 수 있습니다. 또한 강력한 통합 암호문 하드웨어 공급업체가 예측할 수 없는 완전히 독립적인 시드를 생성할 수도 있습니다. 단점은 사용자가 니모닉 단어 외에도 암호를 적절하게 백업해야 한다는 것입니다.
공개키 도출
하드웨어 지갑은 공개 키 (또한 엑스펍, 짧은 확장 공개 키 에 정의 된대로 BIP-32. 그만큼 엑스펍 코인을 받을 수 있는 가능한 주소를 생성하는 데 사용됩니다.
😈 사악한 장치는 시드에서 파생된 올바른 공개 키 대신 공격자가 제어하는 공개 키를 반환할 수 있습니다.
🛡️ 사용자는 파생된 것을 검증할 수 있습니다. 엑스펍 다른 오프라인 장치에서. 그러나 다른 장치에 시드를 입력하면 자체 위험이 따릅니다. 보안을 인식하는 사용자는 시드에 액세스한 장치를 잠재적으로 파괴할 정도로 위험한 것으로 간주할 수 있습니다. 일반 사용자는 추가 위험을 관리하면서 이 절차를 올바르게 수행하는 데 어려움을 겪을 수 있습니다.
정보 유출
An 에어 갭 악의적이거나 손상된 장치가 개인 키를 유출하는 것을 방지하기 위한 솔루션으로 자주 제안됩니다. 결국 장치가 외부 세계와 통신할 수 없으면 유해한 작업을 수행할 수 없습니다.
좀 빠지는!
장치는 사용 중일 때 항상 통신할 수 있습니다. 서명을 생성합니다. 이러한 서명은 브로드캐스트되고 블록체인에 영원히 저장되는 트랜잭션 내부에서 끝납니다.
서명은 최소 64바이트의 무작위로 보이는 바이트 문자열입니다. 그러나 하나 이상의 유효한 서명이 동일한 메시지에 해당할 수 있으므로 악의적인 장치는 서명이 생성될 때마다 여러 서명을 생성하고 게시할 것을 선택적으로 선택하여 몇 비트의 정보를 전달할 수 있습니다.
😈 악성 장치는 많은 트랜잭션을 통해 공격자에게 시드를 공개하는 비무작위 서명을 생성할 수 있습니다!
이러한 백도어 설치에 성공한 공격자는 전체 시드를 재구성할 수 있는 충분한 정보를 얻을 때까지 악의적인 서명이 블록체인에 나타날 때까지 기다리기만 하면 됩니다.
🛡️ ECDSA 서명의 경우 nonce를 확정적으로 유도하는 표준화된 방법을 사용합니다(예: RFC6979) 생성된 서명이 예상된 서명과 일치하는지 확인하는 경우 이 공격을 저지합니다. 그러나 이를 보장하려면 동일한 시드를 가진 두 번째 장치를 로드해야 하며, 이는 이전 섹션에서 언급한 것과 동일한 실제 문제를 초래합니다.
🛡️ 흥미로운 접근 방식은 스마트한 방법을 사용하여 정력에도 유리합니다. 임의의 nonce를 실제로 선택하는 장치입니다. 로 알려진 이 목적을 위한 프로토콜 유출 방지 or 도벽 방지, 현재 Blockstream Jade 및 ShiftCrypto BitBox02 하드웨어 지갑에 구현되어 있습니다. 더 읽어보기 ShiftCrypto의 블로그, 이러한 공격이 실행될 수 있는 방법에 대한 기술적 설명도 포함됩니다.
자, 그럼 희망이 없습니까?
위에 나열된 대부분의 방어 기능🛡️은 대부분 사용자가 자신을 보호하기 위해 명시적이고 침입적인 작업을 수행하도록 요구합니다. 즉, 자체적으로 시드를 생성하거나(본질적으로 하드웨어 지갑의 기능을 대체하기 위해 두뇌를 사용) 계산이 올바르게 실행되는지 확인하기 위해 추가 장치를 활용합니다.
그러나 반출 방지 프로토콜이 눈에 띕니다. 하드웨어 서명자와 외부 세계 사이에 항상 중개하는 기계가 있다는 점을 감안할 때 이 기계가 지원할 수 있습니다. 하드웨어 서명자와의 대화식 프로토콜을 통해 다음을 수행할 수 있습니다. 억지로 시키다 순전히 임의의 논스를 사용하여 최종 서명을 크게 조작할 가능성을 줄이거나 제거합니다.
이 블로그 게시물에서 우리는 주로 다음 유형의 조치에 관심이 있습니다. UX를 크게 악화시키는 전략은 고급 사용자에게 어필할 수 있지만 악화되는 실제로는 기술적으로 덜 숙련된 사용자를 위한 것입니다. 이는 대다수입니다.
보안 모델
하드웨어 서명자를 위한 표준 모델
하드웨어 서명자 제조업체는 다양한 잠재적 위협으로부터 사용자를 보호하는 것을 목표로 합니다(자세한 내용은 위협 모델). 이 문서에서는 다음과 같이 요약할 수 있는 매우 중요한 속성에 중점을 둡니다.
사용자는 승인 전에 화면 정보를 이해하고 확인하는 경우 자금 손실을 초래하는 행동으로 속일 수 없습니다.
모든 민감한 작업, 특히 서명에는 승인이 필요합니다. 맬웨어가 모든 자금을 소모하는 트랜잭션과 같은 임의 메시지에 대한 서명을 생성할 수 있다면 시드를 보호하는 것은 무의미합니다!
소프트웨어 지갑이 완전히 손상된 경우에도 위의 속성이 참이어야 한다는 점을 강조하는 것이 중요합니다. 노트북/휴대폰 화면에 표시되는 내용은 신뢰할 수 없습니다. 맬웨어는 주소를 대체하고, 어떤 주소가 자신의 주소인지 속이고, 트랜잭션을 표시한 다음 서명을 위해 장치에 다른 트랜잭션을 전달할 수 있습니다.
따라서 하드웨어 서명 장치에서 실행되는 펌웨어 및 응용 프로그램은 소프트웨어 지갑을 본질적으로 고려합니다. 신뢰할 수없는 신뢰할 수 없습니다.
소프트웨어 지갑을 위한 백도어 방지 보안 모델
이 섹션에서는 역할을 완전히 뒤집습니다. 우리는 이제 소프트웨어 지갑 하드웨어 제조업체가 자금을 훔치거나 손실을 일으키는 것을 방지합니다. 장치가 완전히 악의적인 경우에도.
따라서 이것은 의 재산이 될 수 없습니다. 장치: 오히려 그것은 의 속성입니다. 소프트웨어 지갑 설정. 다음과 같이 요약할 수 있습니다.
소프트웨어 지갑이 손상되지 않은 경우 하드웨어 제조업체는 사용자가 자금을 잃게 할 수 없습니다.
이는 위에서 설명한 표준 보안 모델과 직접적으로 모순되기 때문에 직관에 반하는 것처럼 보일 수 있습니다. 그러나 "백도어가 없다"는 것은 "정확히 해야 할 일을 하는 것"을 의미합니다. 소프트웨어 지갑은 햇빛 서명 장치와 외부 세계 사이의 인터페이스로 버그나 장치의 명시적인 손상으로 인해 오작동을 방지할 수 있는 유일한 장소입니다.
이 모델은 악용 가능한 버그와 같은 장치 오류 이상으로 확장됩니다. 이 경우 장치가 적극적으로 자금 손실을 유발하는 시나리오 내에서 작동하고 있습니다.
물론 제조업체가 성공적으로 손상되면 가능한 보호가 없습니다. 두 소프트웨어 지갑을 실행하는 장치와 컴퓨터. 따라서 특히 하드웨어를 제조하는 동일한 공급업체에서 구축한 경우 소프트웨어 지갑이 오픈 소스이고 감사가 가능한지 확인하는 것이 절대적으로 중요합니다.
미니스크립트의 역할
Miniscript는 지갑 개발자에게 비트코인 스크립트의 고급 기능을 완전히 활용할 수 있는 기능을 제공합니다. 미니스크립트 잠금 해제의 놀라운 가능성에 대한 개요는 다음을 참조하십시오. 이전 블로그 게시물. 듣고 싶을 수도 있습니다. Stephan Livera 팟캐스트 452화 miniscript가 비트코인 환경에 가져오는 것에 대한 토론을 위해.
Ledger Bitcoin 앱은 2.1.0년 2023월에 배포된 2023 릴리스부터 miniscript를 지원합니다. 마이애미에서 열린 Bitcoin 1.0 컨퍼런스에서 Wizardsardine은 그들의 XNUMX 릴리스를 발표했습니다. 리아나 지갑, miniscript 기반의 최초 배포된 지갑.
이 게시물의 기본 아이디어는 비트코인 지갑 계정을 보호할 수 있다는 것입니다. 여러 열쇠. 이를 통해 전체 오류 또는 키 손상이 치명적이지 않은 유연한 보안 프레임워크가 가능합니다.
멀티시그 사색
멀티시그는 셀프 커스터디 솔루션의 강점을 크게 업그레이드한 것입니다. 비트코인 스크립트의 프로그래밍 기능을 활용하여 하나가 아닌 여러 개의 키가 필요한 지갑을 만들 수 있습니다. ㅏ k-의-n 다중 서명 지갑에는 다음 조합이 필요합니다. k 총 서명 중 유효한 서명 n 가능한 것.
그러나 다중 서명은 또한 사용자에게 UX 부담을 주며 오류에 대한 새로운 기회를 제공합니다. 별도의 위치에 안전하게 백업된 3개의 서로 다른 키를 포함하는 3-of-XNUMX 다중서명 설정은 강력한 보안을 제공합니다. 단일 키를 분실하면 코인에 영구적으로 액세스할 수 없게 됩니다!
따라서 더 많은 중복성을 제공하는 설정(예: 2-of-3 또는 3-of-5)이 더 많이 사용되는 경향이 있습니다. 하나의 키가 손실되더라도 다른 키는 여전히 복구를 용이하게 할 수 있습니다. 그러나 이것은 장단점을 가져옵니다. 하나의 키가 사용자가 모르는 사이에 손상되면 전체 보안이 크게 감소합니다!
좋아하는 회사 집 및 연결되지 않은 자본 고객을 위해 소수의 키를 보유하는 셀프 커스터디 솔루션을 전문으로 합니다. 또한 온보딩 프로세스를 안내하고 기술 지식이 없는 대부분의 사용자에게 어려울 수 있는 보관 시스템 사용을 단순화하여 사용자를 지원합니다.
Miniscript 및 시간 잠금 복구 경로
Liana는 미니스크립트를 사용하여 다양한 지출 방법이 있는 지갑을 만듭니다.
- 즉시 사용 가능한 기본 지출 조건
- 특정 기간 이후에 사용할 수 있는 하나 이상의 추가 지출 조건(소위 타임 락).
이를 통해 많은 흥미로운 사용 사례가 가능합니다.
- 회복: 기본 지출 경로로 단일 서명 또는 다중 서명이 있는 표준 지갑 그러나 별도의 복구 메커니즘(다른 시드가 있는 키, 다중 서명, 기술에 정통한 친구, 관리인)은 6개월 후에 사용할 수 있습니다.
- 통치: 2명의 이사가 있는 회사는 회사 재무를 위해 2대 6를 설립할 수 있습니다. 동의하지 않는 경우 신뢰할 수 있는 변호사가 XNUMX개월 후에 자금에 액세스할 수 있습니다.
- 쇠퇴하는 멀티시그: 지갑은 3대 3으로 시작하여 2개월 후 3대 6으로 전환되고 1개월 후에 3대 9이 됩니다.
- 자동 상속: 6개월 후 회복 경로에는 세 자녀 중 2/3이 포함됩니다. 상속인이 합의에 도달할 수 없는 경우 1년 후 두 번째 복구 경로에는 공증인이 포함될 수 있습니다.
비고: 위의 모든 예는 a를 사용합니다. 상대적 타임록, 코인의 나이를 나타냅니다(즉, 자금이 마지막으로 이동된 시간). 트레이드오프는 타임록이 만료될 경우 사용자가 코인을 소비해야 함을 기억해야 한다는 것입니다(자신에게 전송하여).
이것들은 단지 몇 가지 예일 뿐이지만 미니스크립트가 다음과 같은 비트코인의 잠재력을 실현하기 위한 중요한 단계임을 독자에게 확신시키기에 충분해야 합니다. 프로그래머블 머니.
월렛 정책 등록
여러 키(멀티시그 또는 더 정교한 미니스크립트 기반 솔루션)를 사용하는 비트코인 지갑 계정의 경우 해당 계정에 속한 주소를 식별하도록 장치를 훈련시키는 것이 중요합니다. 이것이 장치가 사용자가 올바른 주소에서 받거나 지출하고 있는지 확인하는 데 도움을 줄 수 있는 유일한 방법입니다.
정책 검증 및 엑스펍 신뢰할 수 있는 백업에 대한 공동 서명자는 필수적이지만 상대적으로 시간이 많이 걸립니다.
좋은 소식은 한 번만 수행하면 된다는 것입니다.
정책이 이름으로 등록되면(예: "Decaying 3of3") 장치는 이러한 정책이 사용될 때마다 정책을 인식할 수 있습니다.
기술 세부 사항에 관심이 있는 사용자는 다음에서 자세한 정보를 찾을 수 있습니다. BIP 제안.
정책 백업
주목해야 할 한 가지 중요한 측면은 다중 키 정책이 private keys 거래를 승인하기 위해, 모든 공개 키(및 정확한 정책)이 필요합니다.
그러나 시드와 달리 정책과 공개 키를 백업하는 것은 훨씬 덜 위험합니다. 누군가 이를 발견하면 해당 정책과 연결된 모든 트랜잭션을 추적할 수 있습니다. 이것이 이상적이지는 않지만 프라이버시가 중요합니다! − 코인을 잃는 것만큼 재앙적이지 않으며 잠재적인 공격자에게 덜 유혹적입니다. 결과적으로 핫월렛에 여러 장의 정책을 저장하고, 인쇄하여 여러 곳에 저장하고, 암호화하여 클라우드 스토리지에 저장하는 등 모두 실행 가능한 전략입니다.
백도어가 없는 단일 서명 지갑
한 걸음 뒤로 물러나 봅시다. 다중 서명 지갑에 대해 논의했지만 이제 단일 서명 지갑을 만들기 위해 기본으로 돌아가겠습니다. 더 정확하게는 지갑을 원합니다. 느낌 및 외모 초기 설정 단계 후 단일 서명 지갑과 같습니다. 그러나 우리는 제조업체가 악의적일지라도 😈 자금을 훔칠 수 없고 하드웨어 서명 장치가 예측할 수 없는 방식으로 작동하는 지갑을 만드는 것을 목표로 합니다.
접근 방식은 다중 서명 지갑에 대해 쉽게 일반화될 수 있습니다.
아래 예는 다음과 같은 언어로 작성됩니다. 정책, 미니스크립트 대신. 정책은 사람이 읽고 생각하기 쉽고 자동화 도구를 사용하여 미니스크립트로 컴파일할 수 있습니다. 미니스크립트 및 정책에 대해 자세히 알아보기.
하드웨어 지갑은 표준 보안 모델에서 귀하를 보호할 수 있습니다. Miniscript는 백도어 방지 보안 모델(그리고 훨씬 더!)에서 사용자를 보호할 수 있습니다.
XNUMX단계: 현상 유지
이것은 오늘날 대부분의 사용자가 사용하는 정책입니다. 하드웨어 지갑에서 생성된 시드에서 파생된 단일 키입니다.
pk(key_ledger)
물론 백도어가 없다는 것을 증명할 방법은 없다.
XNUMX단계: 해당 키 두 배
첫 번째 단계는 간단합니다.
and(pk(key_ledger), pk(key_client))
여기 key_client
사용자의 컴퓨터에서 생성되므로 핫 키. 기본적으로 2/2 다중서명 설정입니다. 주요 측면은 사용자가 많이 상호 작용하지 않는다는 것입니다. key_client
: 소프트웨어 지갑은 이 키를 생성하고 지갑의 백업에 포함하며 필요할 때마다 서명합니다(예: 사용자가 하드웨어 서명자와 바쁘게 서명하는 동안).
이것은 이미 꽤 흥미로워 보입니다. key_client
, 하드웨어 공급업체에서는 사용할 수 없습니다. 악의적인 공급업체가 장치의 키에 대해 완전히 알고 있더라도 소프트웨어 지갑을 실행하는 시스템을 손상시키는 등 명시적으로 사용자를 대상으로 하지 않고는 여전히 자금을 이동할 수 없습니다.
그러나 문제가 있습니다. 지갑 온보딩 중에 하드웨어 서명자는 공개 키(xpub)를 생성할 수 있는 유일한 엔터티입니다. key_ledger
지갑에 사용. 따라서 장치는 의도적으로 잘못 xpub는 공격자에 의해 제어되고 나중에 서명을 거부(또는 불가능)합니다. 틀림없이 이것은 상당히 극단적인 공격 시나리오입니다. 백도어 제작자는 자금을 훔칠 수 없으며 그들이 할 수 있는 최선은 사용자를 개별적으로 표적으로 삼고 몸값을 요구하는 것입니다("나에게 절반을 지불하면 돈을 되찾도록 도와줄 수 있습니다").
보다 현실적으로 이것은 실수의 실수 가능성을 높입니다. 이제 두 개의 시드/개인 키가 있고 다음이 필요합니다. 두 소비할 수 있도록. 둘 중 하나를 잃으면 코인은 영원히 잠깁니다.
XNUMX단계: 타임락 복구
특정 시간 제한 이후에만 액세스할 수 있는 별도의 복구 키를 소개합니다. and(older(25920)
, pk(key_recovery))
, 여기서 25920은 6개월 동안의 대략적인 블록 수입니다. 전체 정책은 다음과 같습니다.
or(
and(pk(key_ledger), pk(key_client)), and(after(25920), pk(key_recovery))
)
이것은 이전 시나리오와 비슷하지만 반전이 있습니다. key_ledger
or key_client
어떤 이유로든 사용할 수 없게 됩니다(가장 일반적으로 시드 백업 손실!). 복구 경로 6개월 후 접근이 가능합니다.
몇 가지 옵션이 있습니다 key_recovery
, 각각 고유한 장단점이 있습니다.
a. 다른 사용 핫 키. 이것은 사용자가 시간 잠금을 재설정하는 것을 기억하는 한 실용적인 솔루션입니다. 그러나 핫 키가 손상된 경우(일반적으로 매우 가능성이 높은 시나리오!) 공격자는 타임록이 만료되는 즉시 자금에 액세스하려고 시도하여 합법적인 소유자와 경쟁을 시작할 수 있습니다.
b. 별도의 하드웨어 서명 장치를 사용하십시오. 이는 강력한 솔루션이며 원하는 경우 다른 공급업체와 함께 사용할 수 있습니다. 그러나 사용자 경험 측면에서 사용자의 설정 복잡성과 비용을 증가시킵니다.
c. 신뢰할 수 있는 외부 서비스를 사용하십시오. 소프트웨어 지갑은 외부 서비스에서 xpub를 가져와 다음과 같이 사용할 수 있습니다. key_recovery
. 이 제XNUMX자는 타임록이 만료된 경우에만 신뢰할 수 있으며, 이는 일부 사용자에게 매력적인 절충안이 될 수 있습니다.
언급한 바와 같이 타임록이 있는 모든 정책과 마찬가지로 사용자가 타임록이 만료되기 전에 코인을 새로 고침하는 것을 기억하는 것이 중요합니다.
XNUMX단계: 신뢰할 수 없는 제XNUMX자
두 가지 아이디어 (a)와 (c)를 혼합해 보겠습니다. 복구 경로에는 로컬 바로 가기 키가 필요합니다. key_recovery_local
및 key_recovery_remote
반신뢰 서비스로 호스팅되는 서비스 우리는 또한 타임록을 유지합니다.
or(
and(pk(key_ledger), pk(key_client)),
and(older(25920),
and(pk(key_recovery_local), pk(key_recovery_remote))
)
)
이렇게 하면 복구 서비스에 필요한 신뢰 수준이 낮아집니다. 그러나 우리는 주의를 기울여야 합니다. 서비스 자체가 블록체인을 모니터링하고 UTXO를 감지할 수 있습니다. key_recovery_remote
xpub에서 파생된 pubkey를 포함하는 UTXO를 스캔할 수 있습니다. key_recovery_remote
. 타임록이 만료되기 전에, 그리고 우리가 그들의 서비스를 사용한 적이 없더라도 그들은 우리의 재무 기록에 대해 알 수 있을 것입니다.
비고: Taproot 트리는 특정 정책에 대해 이 개인 정보 보호 문제를 제거할 수 있지만 항상 그런 것은 아니며 특정 정책에 따라 신중한 평가가 필요합니다.
XNUMX단계: 제XNUMX자를 가리기 🙈
복구 서비스가 우리의 재무 기록에 대해 알지 못하도록 하기 위해 그들이 우리에게 전달하는 pubkey를 사용하는 대신 블라인드 엑스펍 기술 mflaxman이 여기에서 자세히 설명했습니다.. 요컨대, 사용하는 대신 key_recovery_remote
정책에서 31개의 XNUMX비트 난수를 선택합니다. a
, b
, c
, d
( 눈부신 요인), 다음을 사용합니다. BIP-32 파생된 pubkey:
key_recovery_remote_blind = key_recovery_remote_blind/a/b/c/d
추가하는 것도 중요합니다. key_recovery_remote
, 눈부신 요인 a
, b
, c
및 d
나중에 참조할 수 있도록 백업합니다.
복구 서비스를 사용해야 하는 경우 공개하겠습니다. a
, b
, c
, d
그들에게. 그때까지 그들은 자신의 키에서 파생된 키를 발견할 방법이 없습니다. key_recovery_remote
가 블록체인에 게시되고 있습니다: 4가지 블라인드 요소에 대한 가능한 조합의 수는 2^(31*4) = 2^124
, 그들 모두를 무차별 대입하는 것이 불가능합니다.
XNUMX단계: 단축키가 너무 많으면 화상을 입을 수 있습니다 🔥
우리는 소프트웨어 지갑을 백도어 불가능하게 만드는 데 성공했습니다. 그러나 우리는 다른 문제를 도입했습니다. 두 지출 조건 모두 지역에서 생성된 고온 하드웨어 지갑에서 확인되지 않은 키. 따라서 호스트 시스템이 손상되면 공개키를 사용하여 정책을 등록하도록 속일 수 있습니다. key_client
및 key_recovery_local
, 그러나 백업에 임의의 관련 없는 개인 키를 넣습니다(기억하십시오. 고온 키는 백업의 일부입니다!).
기본적으로 지갑으로 보내지는 모든 자금을 만들 것입니다. 소비할 수 없는아무도 서명에 필요한 개인 키를 제어하지 않기 때문입니다.
이 문제를 해결하기 위한 몇 가지 솔루션이 있습니다.
- 온보딩 중에 종이에 백업을 인쇄한 후 별도의 장치를 사용하여 백업의 개인 및 공개 핫 키가 실제로 일치하는지 확인할 수 있습니다. 이 접근 방식은 재구성 및 서명에 필요한 모든 필수 키가 있다고 확신하므로 문제를 제거합니다.
- 우리는 더 긴 타임록(9개월, 38880 블록)으로 또 다른 지출 조건을 추가할 수 있습니다.
key_ledger_failsafe
하드웨어 장치에서. 이런 식으로 다른 모든 것이 실패하는 절대적인 최악의 시나리오에서 우리는 단일 서명 장치의 보안으로 돌아갑니다. 정상적인 작업에서는 첫 번째 시간 잠금이 만료되지 않도록 하므로 두 번째 시간 잠금도 만료되지 않습니다!
두 번째 접근 방식을 사용하면 최종 정책은 다음과 같습니다.
or(
and(pk(key_ledger), pk(key_client)),
or(
and(older(25920),
and(pk(key_recovery_local), pk(key_recovery_remote_blind))
),
and(older(38880), pk(key_ledger_failsafe))
),
)
이 소프트웨어 지갑 구성은 처음에 주장한 모든 보안 속성을 충족합니다. 또한 주요 지출 키의 경우 복구 경로를 제공합니다. key_ledger
길을 잃었다. 있으면 좋은 기능!
백도어가 불가능한 소프트웨어 지갑에 온보딩
이렇게 복잡한 정책을 사용하는 지갑에 대한 사용자 경험은 어떤 모습일까요? 간략한 개요는 다음과 같습니다.
- 사용자는 소프트웨어 지갑을 열고 새 계정 생성을 시작합니다.
- 소프트웨어 지갑은 사용자에게 서명 장치를 연결하라는 메시지를 표시하고 xpubs를 검색합니다.
key_ledger
및key_ledger_failsafe
. - 소프트웨어 지갑은 key_client 핫키를 자율적으로 생성합니다.
- 소프트웨어 지갑은
key_recovery_remote
공동 서명 서비스에서 또는 사용자가 다른 방식으로 키를 지정할 수 있습니다. 선택적으로 다음을 계산합니다.key_recovery_remote_blind
앞에서 언급한 블라인드 기술을 사용합니다. - 소프트웨어 지갑은 정확한 미니 스크립트 정책, 모든 xpubs 및 확장 개인 키를 포함하는 정책 백업을 생성합니다.
key_client
단축키. 이 백업은 안전하게 저장됩니다(예: 종이에 인쇄되거나 별도의 장치에 저장됨). - 마지막으로 소프트웨어 지갑은 사용자에게 장치에 정책을 등록하도록 지시합니다. 사용자는 백업을 교차 확인합니다(종이 또는 소프트웨어 지갑에서 제어하는 화면 이외의 매체).
소프트웨어 지갑은 위의 단계 대부분을 관리하므로 다중 서명 지갑을 설정하는 데 오늘날 필요한 예상 노력보다 사용자 참여가 더 부담스럽지 않습니다.
좋은 UX가 구축되면 온보딩에 몇 분이 소요됩니다. 완료되면 소프트웨어 지갑은 일반적인 단일 서명 지갑과 매우 유사한 사용자 경험을 제공할 수 있습니다. 이것이 미니스크립트가 모든 것을 바꾸는 방법입니다: 사용자의 시야에서 사라짐으로써!
탭루트 개선
Ledger는 2.1.0월에 출시된 비트코인 앱 버전 XNUMX부터 미니스크립트를 지원합니다. 탭 루트 주소에서 수신 및 지출에 대한 지원은 탭루트 소프트포크 2021년 XNUMX월에 우리는 이제 로드맵의 다음 단계인 taproot에 대한 미니스크립트 지원을 마무리하고 있습니다.
Taproot는 이 기사에 제시된 접근 방식의 유용성에 큰 영향을 미칠 것입니다. 기본 지출 경로가 단일 키 지출 조건인 경우 복구 지출 경로가 활용되지 않는 한 블록체인에서 복구 지출 경로의 존재를 감지할 수 없습니다. 이렇게 하면 표준 지출 경로에 대한 모든 지문을 완전히 제거하여 개인 정보를 크게 향상시킬 수 있습니다. 또한 표준 지출 경로가 최대한 비용 효율적으로 사용되므로 확장성이 향상됩니다. 즉, 복구 경로를 사용하지 않는 한 복구 경로로 인해 추가 비용이 발생하지 않습니다. 이는 지출 중에 모든 지출 조건을 포함하여 전체 스크립트를 게시해야 하는 SegWit 거래에서 상당한 업그레이드입니다.
마지막으로 다음과 같은 고급 프로토콜 뮤시그2 (최근 표준화) 및 FROST taproot 키 경로를 강화합니다. Schnorr 서명을 기반으로 구축된 이러한 프로토콜을 사용하면 단일 집계 공개키 나타내는 데 사용할 수 있는 n-의-n 다중 서명 또는 k-의-n 임계값 체계. 이렇게 하면 오늘날 특정 멀티시그 스크립트로 더 일반적으로 표현되는 경우에도 탭루트 키 경로를 사용할 수 있습니다.
결론
이 기사는 miniscript가 소프트웨어 지갑을 위해 발휘하는 광대한 디자인 공간의 작지만 중요한 틈새를 탐색합니다.
우리는 미니스크립트를 사용하여 "백도어가 불가능한" 소프트웨어 지갑을 만드는 동시에 치명적인 키 손실을 방지할 수 있는 추가 복구 경로를 추가하는 방법을 보여주었습니다. 하드웨어 서명 장치가 백도어 방지 보안 모델을 시행할 수는 없지만 미니스크립트를 지원함으로써 소프트웨어 지갑이 정확히 그렇게 할 수 있습니다!
다중 서명 체계, 타임록, 블라인드 xpubs 및 핫키의 조합을 영리하게 활용하여 보안, 개인 정보 보호 및 견고성의 균형을 이루는 안전한 지갑 구성을 시연했습니다.
또한 설정의 복잡성이 큰 추가 UX 부담으로 해석되지 않기 때문에 사용자 경험에 부정적인 영향을 미치지 않으면서 이것이 가능하다고 주장했습니다.
우리는 miniscript가 차세대 비트코인 자기 수탁을 위해 열릴 가능성에 흥분하고 있습니다.
- SEO 기반 콘텐츠 및 PR 배포. 오늘 증폭하십시오.
- PlatoData.Network 수직 생성 Ai. 자신에게 권한을 부여하십시오. 여기에서 액세스하십시오.
- PlatoAiStream. 웹3 인텔리전스. 지식 증폭. 여기에서 액세스하십시오.
- 플라톤ESG. 자동차 / EV, 탄소, 클린테크, 에너지, 환경, 태양광, 폐기물 관리. 여기에서 액세스하십시오.
- BlockOffsets. 환경 오프셋 소유권 현대화. 여기에서 액세스하십시오.
- 출처: https://www.ledger.com/blog/towards-a-trustless-bitcoin-wallet-with-miniscript
- :있다
- :이다
- :아니
- :어디
- $UP
- 1
- 2021
- 2023
- 30
- 7
- 9
- a
- 능력
- 할 수 있는
- 소개
- 위의
- 절대
- 절대적으로
- ACCESS
- 액세스
- 얻기 쉬운
- 일치
- 계정
- 계정
- 동작
- 행위
- 활발히
- 실제로
- 더하다
- 첨가
- 또한
- 추가
- 또한
- 구애
- 많은
- 후
- 반대
- 나이
- 도움
- 겨냥
- All
- 수
- 수
- 따라
- 이미
- 또한
- 이기는하지만
- 항상
- an
- 및
- 발표
- 다른
- 어떤
- 아무것도
- 앱
- 정치
- 표시
- 어플리케이션
- 접근
- 구혼
- 승인
- 근접한
- 있군요
- 틀림없이
- 논쟁하는
- 기사
- AS
- 양상
- 지원
- 관련
- At
- 공격
- 감사 가능
- 권한을 부여하다
- 자동화
- 자율적으로
- 가능
- 뒤로
- 뒷문
- 뒷받침 된
- 역행
- 백업
- 균형
- 기반으로
- 기본
- 원래
- 기초
- BE
- 때문에
- 가
- 된다
- 전에
- 처음
- 존재
- 이하
- BEST
- 사이에
- 그 너머
- 비트코인
- 비트 코인 지갑
- 비트 코인 지갑
- 혼합
- blockchain
- 블록
- 블록스트림
- 블로그
- 두
- 뇌
- 돋보이게
- 방송
- 곤충
- 빌드
- 내장
- 부담
- 화상
- 사업
- 바쁜
- 비자 면제 프로그램에 해당하는 국가의 시민권을 가지고 있지만
- by
- 라는
- CAN
- 수
- 주의
- 케이스
- 가지 경우
- 치명적인
- 원인
- 일으키는
- 주의
- 어떤
- 도전
- 기회
- 이전 단계로 돌아가기
- 어린이
- 칩
- 왼쪽 메뉴에서
- 선택
- 주장
- 명확하게
- 클라우드
- 클라우드 스토리지
- 암호
- 코인
- 결합
- 조합
- 상업
- 공통의
- 일반적으로
- 소통
- 기업
- 회사
- 회사
- 완전한
- 완전히
- 복잡한
- 복잡성
- 손상된
- 손상
- 계산
- 컴퓨팅
- 우려 사항
- 조건
- 조건
- 컨퍼런스
- 구성
- 연결하기
- 일치
- 따라서
- 고려
- 고려
- 포함
- 통제
- 컨트롤
- 납득시키다
- 수정
- 손상
- 비용
- 수
- 코스
- 만들
- 만들기
- 창조
- 창조자
- 임계
- 중요한 측면
- 결정적인
- 현재
- 후견인
- 보관
- 고객
- 위험한
- 거부
- 감소하다
- 생각하다
- 한정된
- 수요
- 시연
- 배포
- 파생
- 설명
- 디자인
- 설계
- 원하는
- 세부 묘사
- 상세한
- 세부설명
- 검색
- 개발자
- 장치
- 디바이스
- 다른
- 어려운
- 점감하는
- 직접
- 이사
- 사라지는
- 비참한
- 발견
- 발견
- 논의 된
- 토론
- 표시된
- do
- 하지
- 하지 않습니다
- 한
- 더블
- 두
- ...동안
- 마다
- 쉽게
- 용이하게
- 노력
- 중
- 제거
- 제거
- 그렇지 않으면
- 강조하다
- 고용 된
- 가능
- 사용 가능
- 수
- end
- 억지로 시키다
- 충분히
- 확인
- 보장
- 입력
- 유혹
- 전체의
- 전적으로
- 실재
- 장비
- 오류
- 특히
- 필수
- 본질적으로
- 세우다
- 등
- 평가
- 조차
- EVER
- 모든
- 모두
- 정확하게
- 예
- 예
- 흥분한
- 실행
- 처형 된
- 운동
- 존재
- 기대하는
- 경험
- 만료
- 공적
- 탐구하다
- 수출
- 확장하다
- 외부
- 극단
- 용이하게하다
- 요인
- 실패
- 고장
- 꽤
- 떨어지다
- 멀리
- 특색
- 특징
- Feb
- 를
- 최후의
- 금융
- 재무 역사
- Find
- 먼저,
- 융통성있는
- 플립
- 초점
- 수행원
- 다음
- 럭셔리
- 영원히
- 앞으로
- 사
- 프레임 워크
- 자주
- 친구
- 에
- 가득 찬
- 충분히
- 기능
- 기금
- 자금
- 게다가
- 쓸데없는
- 미래
- 범용
- 일반적으로
- 생성
- 생성
- 생성
- 생성
- 세대
- 주어진
- Go
- 가는
- 좋은
- 큰
- 매우
- 했다
- 반
- 하드웨어
- 하드웨어 장치
- 하드웨어 지갑
- 하드웨어 지갑 제조업체
- 하드웨어 지갑
- 해로운
- 있다
- 데
- 도움
- 금후
- history
- 보유
- 기대
- 주인
- 호스팅
- 뜨거운
- 방법
- 그러나
- HTTP
- HTTPS
- 거대한
- 인간
- 생각
- 이상
- 아이디어
- 확인
- if
- 바로
- 영향
- 영향을주는
- 구현
- import
- 중대한
- 불가능한
- 개선
- in
- 포함
- 포함
- 통합
- 증가
- 믿을 수
- 참으로
- 독립
- 개별적으로
- 산업
- 정보
- 본질적으로
- 처음에는
- 내부
- 소식통
- inspire
- 설치
- 예
- 를 받아야 하는 미국 여행자
- 의도적으로
- 상호 작용하는
- 대화형
- 관심
- 관심있는
- 흥미있는
- 인터페이스
- 으로
- 소개
- 소개
- 소개합니다
- 를 간섭
- 참여
- 참여
- 발행물
- IT
- 그
- 그 자체
- 다만
- 딱 하나만
- 키
- 키
- 알아
- 지식
- 알려진
- 경치
- 언어
- 휴대용 퍼스널 컴퓨터
- 성
- 후에
- 변호사
- 오퍼
- 배우다
- 배우기
- 가장 작은
- 원장
- 왼쪽 (left)
- 합법적 인
- 적게
- 하자
- 레벨
- 레버리지
- 처럼
- 아마도
- 연결
- 상장 된
- 로드
- 지방의
- 위치
- 고정
- 긴
- 이상
- 보기
- 같이
- 잃다
- 지는
- 오프
- 사상자 수
- 잃어버린
- 기계
- 본관
- 과반수
- 확인
- 제작
- 유튜브 영상을 만드는 것은
- 악성 코드
- 관리하다
- 관리
- 조작하는
- 태도
- 제조업 자
- 제조 업체
- .
- Mar
- 경기
- XNUMX월..
- 방법
- 조치들
- 기구
- 매질
- 말하는
- 단지
- 메시지
- 메시지
- 방법
- 방법
- 마이애미
- 수도
- 미니 스크립트
- 소수
- 회의록
- Mission
- 실수
- 모델
- 돈
- 모니터링
- 개월
- 배우기
- 또한
- 가장
- 대개
- 움직임
- 움직이는
- 많은
- 여러
- Multisig
- 절대로 필요한 것
- name
- 근접
- 필요한
- 필요
- 필요
- 요구
- 부정적으로
- 네트워킹
- 못
- 신제품
- news
- 다음 것
- 좋은
- 아니
- 비 기술적
- 표준
- 십일월
- 2021년 XNUMX월
- 지금
- 번호
- 숫자
- 얻다
- of
- 제공
- 제공
- 제공
- 오프라인
- on
- 온 보딩
- 일단
- ONE
- 사람
- 만
- 열 수
- 오픈 소스
- 열립니다
- 운영
- 행정부
- 기회
- 옵션
- or
- 주문
- 기타
- 그렇지 않으면
- 우리의
- 아웃
- 설명
- 외부
- 위에
- 전체
- 개요
- 자신의
- 소유자
- 서
- 최고의
- 부품
- 특별히
- 파티
- 통로
- 지불
- 수행
- 혹시
- 기간
- 영구적으로
- 상
- 전화
- 장소
- 장소
- 플라톤
- 플라톤 데이터 인텔리전스
- 플라토데이터
- 포인트 적립
- 전철기
- 정책
- 정책
- 인기 문서
- 가능성
- 가능한
- 혹시
- 게시하다
- 가능성
- 잠재적으로
- 힘
- 실용적인
- 거의
- 연습
- 정확한
- 정밀하게
- 예측
- 예측 가능
- 존재
- 제시
- 제시
- 예방
- 방지
- 너무 이른
- 이전에
- 주로
- 일차
- 인쇄
- 이전에
- 개인 정보 보호
- 사설
- 개인 키
- 개인 키
- 문제
- 문제
- 순서
- 방법
- 생산
- 생산
- 생산하다
- 정확히
- 속성
- 재산
- 제안 된
- 보호
- 보호
- 보호
- 보호
- 프로토콜
- 프로토콜
- 증명
- 제공
- 제공
- 공개
- 공개 키
- 공개 키
- 게시
- 출판
- 출판
- 목적
- 놓다
- 입고
- 문제
- 경주
- 닥치는대로의
- 몸값
- 차라리
- 도달
- 읽기
- 리더
- 실현
- 이유
- 전수
- 최근에
- 인식
- 기록
- 회복
- 의미
- 회원가입
- 등록된
- 등록
- 상대적으로
- 공개
- 출시
- 의지하다
- 기억
- 교체
- 대표
- 대표되는
- 평판
- 필요
- 필수
- 필요
- 결과
- 유지
- return
- 공개
- 연락해주세요
- 위험
- 위험
- 위험한
- 로드맵
- 강력한
- 견고성
- 직위별
- 역할
- 달리는
- 실행
- 같은
- 라고
- 확장성
- 주사
- 대본
- 계획
- 계획들
- 슈 너르
- 화면
- 스크립트
- 둘째
- 섹션
- 안전해야합니다.
- 안전하게
- 보안
- 참조
- 씨
- 씨앗
- 모색
- 보다
- 것
- SegWit
- 자기 양육권
- 전송
- 민감한
- 전송
- 별도의
- 서비스
- 세트
- 설치
- 몇몇의
- 짧은
- 영상을
- 보여
- 기호
- 서명
- 상당한
- 크게
- 로그인
- 안전표시
- 비슷한
- 단순, 간단, 편리
- 단순화
- 이후
- 단일
- 작은
- 스마트 한
- So
- 소프트웨어
- 해결책
- 솔루션
- 풀다
- 일부
- 어떤 사람
- 곧
- 정교한
- 출처
- 스페이스 버튼
- 전문화하다
- 구체적인
- 명세서
- 지출
- 지출
- 표준
- 서
- 시작
- Status
- 단계
- 단계
- 아직도
- 저장
- 저장
- 저장
- 전략들
- 힘
- 끈
- 강한
- 노력
- 성공한
- 성공적으로
- 이러한
- 요약
- 과급
- SUPPORT
- 지원
- 지원
- 가정
- 전신의
- 시스템 리스크
- 시스템은
- 태클
- 받아
- 직근
- 목표
- 대상
- 테크니컬
- 기술적으로
- Technology
- 조건
- 보다
- 그
- XNUMXD덴탈의
- 동전
- 그들의
- 그들
- 그들 자신
- 그때
- 그곳에.
- 그것에 의하여
- 따라서
- Bowman의
- 그들
- 일
- 생각
- 제삼
- 이
- 그
- 위협
- 세
- 임계값
- 을 통하여
- 그러므로
- 시간
- 시간이 많이 걸리는
- 에
- 오늘
- 오늘의
- 너무
- 검색을
- 이상의 주제
- 금액
- 에 대한
- 더듬다
- 선로
- 실적 기록
- Train
- 거래
- 거래 내역
- 전환
- 번역
- 국고
- 나무
- 참된
- 믿어
- 신뢰할 수있는
- trustless
- 진실
- 트위스트
- 두
- 유형
- 전형적인
- 할 수 없는
- 이해
- 해방
- 같지 않은
- 잠금을 해제
- 잠금 해제
- 예측할 수
- 까지
- 업그레이드
- us
- 유용성
- 사용
- 익숙한
- 사용자
- 사용자 경험
- 사용자
- 사용
- 사용
- 활용
- 사용
- 활용
- ux
- 유효 기간
- 종류
- 여러
- 거대한
- 공급 업체
- 확인
- 확인
- 버전
- 대단히
- 존립 할 수있는
- 필수
- 취약점
- 기다리다
- 지갑
- 지갑
- 필요
- 였다
- 방법..
- 방법
- we
- 했다
- 뭐
- 언제
- 때마다
- 여부
- 어느
- 동안
- 모든
- why
- 위키 백과
- 의지
- 과
- 이내
- 없이
- 말
- 세계
- 겠지
- 쓴
- 잘못된
- year
- 아직
- 자신의
- 너의
- 당신 자신
- 제퍼 넷
- 제로