memo-circle-infoICP ストレージ

Internet Computer Protocol(ICP)によるステルスメッセージング仕様

概要

zERC20 は、ステルスメッセージングを実現するために Internet Computer(♾️ ICP)を活用しています。2 つの canister(canister: ICP 上のスマートコントラクト)が、送信者と受信者の関係をオンチェーンで明かすことなく、暗号化された通信を処理します。

ファイル: zstorage/

コンポーネント

Key Manager キャニスター

ファイル: zstorage/backend/key_manager/

VetKD(Verifiable Encrypted Threshold Key Derivation)を用いてアイデンティティベース暗号(IBE)鍵を導出します。

機能

  • EVM アドレスごとに Boneh-Franklin IBE シークレットを導出

  • 鍵リクエストに Nonce と TTL を強制

  • 受信者が EVM 署名で認証して閲覧鍵(View Key)を取得

Storage キャニスター

ファイル: zstorage/backend/storage/

暗号化されたアナウンスメントと署名済み Invoice を永続化します。

機能

  • 暗号化アナウンスメントの保存・取得

  • 署名済み Invoice の保存・取得

  • 受信者向けのページネーション付きスキャン

データ構造

Invoice

受信者が起点となる支払いリクエストです。

Announcement

送信者が起点となる暗号化ペイロードです。

Stealth Payload

アナウンスメントを復号した内容です。

ワークフロー

Invoice フロー(受信者起点)

モード

  • Single:Invoice あたり 1 つのバーンアドレス

  • Batch:最大 10 個のバーンアドレス(サブ ID:0〜9)

Payment Advice フロー(送信者起点)

受信者によるスキャン

暗号化スキーム

IBE(Identity-Based Encryption)

  • 方式:Boneh-Franklin IBE

  • アイデンティティ:受信者の EVM アドレス

  • 鍵導出:ICP サブネット鍵からの VetKD

ペイロード暗号化

復号

クライアントライブラリ

Rust クライアント

ファイル: zstorage/frontend/(Rust)

TypeScript クライアント

ファイル: frontend/src/services/sdk/storage/

同等の機能を持つブラウザ対応クライアントです。

セキュリティに関する考慮事項

  • Key Manager の信頼:ICP サブネットがマスター鍵を分散保有するため、単一ノードによる復号は不可能

  • Storage のプライバシー:キャニスターは暗号化データのみ保存し、内容を読むことはできない

  • 認証:鍵リクエストには EVM 署名が必要

  • Nonce / TTL:鍵導出リクエストへのリプレイ攻撃を防止

最終更新