ZooBC 위키
통합

하드웨어 지갑

하드웨어 지갑은 개인 키를 보관하고 자체 화면에서 서명하는 작은 기기로, 키가 결코 컴퓨터에 닿지 않게 합니다. ZooBC는 이런 기기의 제조사를 위한 서명 명세를 작성했습니다. 이 명세는 기기가 ZooBC 트랜잭션에 서명하기 전에 무엇을 검사하고, 보여 주고, 계산해야 하는지 정합니다.

핵심: 무엇에 서명할지는 기기가 정합니다

컴퓨터는 침해될 수 있지만, 기기는 사용자가 신뢰하는 부분입니다. 그래서 명세는 기기가 주도권을 쥐게 합니다. 컴퓨터는 트랜잭션을 제안할 뿐입니다. 기기는 이를 필드 단위로 읽고, 그 뜻을 사용자에게 보여 주며, 다이제스트를 직접 계산하여 사용자가 승인한 것에만 서명합니다.

키

기기는 복구 문구에서 m/44'/883'/account'를 따라 Ed25519용 SLIP-0010으로 키를 도출하며, 883은 ZooBC의 코인 유형입니다(키와 계정 유형). 따라서 서명은 Bitcoin 기기가 만드는 secp256k1 서명이 아니라, 다른 네이티브 ZooBC 계정과 마찬가지로 Ed25519 서명입니다. 키는 결코 기기를 떠나지 않습니다.

기기가 해야 하는 일

  1. 컴퓨터로부터 서명되지 않은 트랜잭션 바이트와 체인의 제네시스 해시를 받습니다.
  2. 모든 필드를 직접 해석하며, 길이 필드들이 정확히 맞아떨어지지 않는 트랜잭션은 거부합니다.
  3. 송신자를 확인합니다. 송신자가 기기 자신이 도출한 계정이 아니면 거부합니다.
  4. 네트워크, 트랜잭션 유형, 금액, 전체 수신자, 수수료, 생존 결제(데이터 보관 비용 (롱제비티)), 메시지, 에스크로(에스크로)를 보여 줍니다.
  5. 사용자의 승인을 기다립니다.
  6. 체인 결속 다이제스트 SHA3-256("ZBC-TX" ‖ 제네시스 해시 ‖ 바이트)를 직접 계산하고 Ed25519로 서명합니다(체인 결속 서명).
  7. 서명만 컴퓨터에 돌려줍니다.
컴퓨터는 서명되지 않은 바이트와 제네시스 해시를 보냅니다. 기기는 모든 필드를 해석하고, 송신자를 확인하고, 네트워크, 전체 수신자, 금액, 수수료를 보여 주고, 승인을 기다린 뒤, 다이제스트를 직접 계산해 Ed25519 서명을 돌려줍니다. 미리 만들어진 32바이트 다이제스트는 거부됩니다
컴퓨터는 서명되지 않은 바이트와 제네시스 해시를 보냅니다. 기기는 모든 필드를 해석하고, 송신자를 확인하고, 네트워크, 전체 수신자, 금액, 수수료를 보여 주고, 승인을 기다린 뒤, 다이제스트를 직접 계산해 Ed25519 서명을 돌려줍니다. 미리 만들어진 32바이트 다이제스트는 거부됩니다

이 규칙들의 이유

  • 미리 만들어진 다이제스트에는 결코 서명하지 않습니다. 컴퓨터가 보낸 32바이트 다이제스트는 사용자가 본 적 없는 트랜잭션의 해시일 수 있습니다. 기기는 자신이 해석하고 보여 준 바이트로 다이제스트를 만들어야 합니다. 같은 이유로 원시 메시지에 서명하는 명령은 정확히 32바이트인 입력을 거부하여, 트랜잭션 다이제스트가 메시지로 끼어들 수 없게 합니다.
  • 수신자는 줄이지 말고 전체를 보여 줍니다. 비슷하게 생긴 주소는 줄인 주소의 앞부분과 끝부분이 일치하도록 만들어 낼 수 있습니다.
  • 네트워크를 보여 줍니다. 제네시스 해시가 서명이 어느 체인에서 유효한지를 결정하므로, 사용자는 트랜잭션이 어느 네트워크를 위한 것인지 봅니다(devnet, testnet, mainnet).

어디서 시작할까

명세는 기기가 먼저 세 가지 트랜잭션 유형을 지원하도록 권장합니다. SendZBC(결제), TransferToken(토큰 전송, 토큰 발행 참조), ApprovalEscrow(에스크로 결제 승인)입니다.

같이 보기