英語原文の機械翻訳です。 English

ポスト量子鍵導出: 開発者向けの HD ウォレット パターン

📅 最終更新日: 2026 年 8 月 2 日 🎧 聞く: ~4 分

階層的決定論的 (HD) ウォレットは、単一のシードから無制限のアドレスを導出することにより、暗号通貨のキー管理に革命をもたらしました。ただし、BIP-32 は secp256k1 楕円曲線計算に依存しているため、量子的な脆弱性が生じます。このガイドでは、ラティスベースおよびハッシュベースのアプローチを使用したポスト量子 HD ウォレット パターンについて説明します。の SynX耐量子ウォレット は、シームレスなキー管理のためにこれらの技術を実装しています。

従来の HD ウォレットの制限を理解する

BIP-32 HD ウォレットは、楕円曲線点乗算を使用して子キーを導出します。

# 従来の BIP-32 (量子脆弱性) child_key = 親キー + HMAC-SHA512(チェーンコード、データ) child_public = child_private × G # ECポイント倍率

量子の脅威は次の 2 つの領域にあります。

  • 公開鍵の導出: 秘密鍵から公開鍵を導出するには EC 乗算を使用します。Shor のアルゴリズムはこれを破ります
  • 強化された派生: 強化されたパスは導出関係を隠しますが、基礎となる EC 数学は脆弱なままです

ポスト量子セキュリティにはまったく新しい導出スキームが必要です。

ポスト量子導出戦略

SynX耐量子ウォレット は 3 層のアプローチを使用します。

  1. シードの生成: 標準 BIP-39 ニーモニック → 512 ビット シード (量子安全エントロピー)
  2. パスの導出: SHAKE-256 または HKDF を使用してパスごとの決定論的ランダム性を導き出す
  3. 鍵の生成: 派生ランダム性を Kyber/SPHINCS+ キー生成のシードとして使用する
重要な洞察: ニーモニック バックアップのアプローチは引き続き有効です。派生シードがキーペアになる方法のみが変更されます。ユーザーは、量子耐性を獲得しながら、使い慣れた 24 単語の回復フレーズを維持します。

実装: シード拡張

輸入 ハッシュリブ 輸入 hmac から タイピング 輸入 リスト、タプル クラス PostQuantumHDウォレット: """ ポスト量子階層型決定論的ウォレットは、実際の暗号鍵に Kyber-768 および SPHINCS+ を使用した決定論的鍵導出に SHAKE-256 を使用します。 確かに __初期化__(self、master_seed: バイト): """ マスター シード (通常は BIP-39 ニーモニックから) から初期化します。 Args: master_seed: PBKDF2(ニーモニック、salt="mnemonic"+passphrase) からの 64 バイト シード """ if len(マスターシード) < 32: 上げる 値エラー(「シードは少なくとも 256 ビットでなければなりません」) self.master_seed = マスターシード # マスターチェーンコードの導出 (パス導出に使用) self.master_chain_code = self._derive_chain_code(master_seed, b「SynX-PQ-HD-マスター」) 確かに _派生チェーンコード(self、シード: バイト、コンテキスト: バイト) -> バイト: """階層導出用のチェーンコードを導出する""" h = hashlib.shake_256() h.update(シード + コンテキスト) 戻る h.ダイジェスト(32) 確かに 派生パスシード(self、パス: str) -> バイト: """ 特定のパスの決定的ランダム性を導出する パス形式: "m/44'/9999'/0'/0/0" (BIP-44 スタイル) 引数: path: 導出パス文字列 戻り値: キー生成のための 64 バイトの決定的ランダム性 """ コンポーネント = self._parse_path(パス) current_seed = self.master_seed current_chain = self.master_chain_code のために 成分 in コンポーネント: current_seed、current_chain = self._derive_child( current_seed、current_chain、component ) 戻る 現在のシード 確かに _parse_path(self、パス: str) -> リスト[int]: """BIP-32 スタイルのパスをコンポーネントに解析します""" そうでない場合 path.startswith("m/"): 上げる 値エラー(「パスは「m/」で始まる必要があります。」) コンポーネント = [] のために 一部 in パス[2:].split("/"): そうでない場合 一部: 続く if part.endswith("'"): # 強化された派生 インデックス = int(part[:-1]) + 0x80000000 それ以外: インデックス = int(部分) コンポーネント.append(インデックス) 戻る コンポーネント 確かに _derive_child( self、parent_seed: バイト、parent_chain: バイト、インデックス: int ) -> タプル[バイト、バイト]: """ 子シードとチェーン コードを派生します。 BIP-32 と同様の HMAC-SHA512 を使用しますが、ポスト量子安全な拡張のために SHAKE-256 に出力フィードします。 """ # インデックスを 4 バイトのビッグエンディアンとしてエンコードします Index_bytes = Index.to_bytes(4, '大きい') # 子派生データの HMAC data = hmac.new( 親チェーン, 親シード + インデックスバイト, hashlib.sha512 ).digest() # 残り 32 バイト → 子シードコンポーネント # 右32バイト → 新しいチェーンコード child_seed_component = データ[:32] child_chain = データ[32:] # 親と子を結合して新しいシードを作成します # 量子耐性のある混合には SHAKE-256 を使用する h = hashlib.shake_256() h.update(親シード + 子シードコンポーネント + インデックスバイト) 子シード = h.ダイジェスト(64) 戻る 子シード、子チェーン # 使用例 確かに デモパス導出(): # ニーモニックからマスターシードをシミュレート 輸入 シークレットマスターシード = Secrets.token_bytes(64) ウォレット = PostQuantumHDウォレット(マスターシード) # さまざまなアカウントのシードを派生する パス = [ "m/44'/9999'/0'/0/0", # アカウント 0、外部、アドレス 0 "m/44'/9999'/0'/0/1", # アカウント 0、外部、アドレス 1 "m/44'/9999'/0'/1/0", # アカウント 0、内部 (変更)、アドレス 0 "m/44'/9999'/1'/0/0", # アカウント 1、外部、アドレス 0 ] のために パス in パス: path_seed = Wallet.derive_path_seed(path) print(f「{パス}: {path_seed[:16].hex()}...」)

パスシードからの Kyber キーの生成

パスの決定論的ランダム性が得られたら、Kyber-768 キーペアを生成します。

輸入 オークス クラス 決定論的カイバー: """ HD ウォレット パスから決定論的な Kyber-768 キーを生成します。キー生成のランダム ソースとしてパス シードを使用します。 """ 確かに __初期化__(自己): self.algorithm = 「カイバー768」 確かに シードから生成(self、path_seed: バイト) -> タプル[バイト、バイト]: """ 決定的なシードから Kyber キーペアを生成します。 引数: path_seed: HD ウォレット派生からの 64 バイト 戻り値: (public_key, Secret_key) のタプル """ # Kyber には特定の量のランダム性が必要です # SHAKE-256 を使用してシードを必要な長さに拡張します h = hashlib.shake_256() h.update(path_seed + b「Kyber-768-keygen」) # Kyber-768 はキー生成に 64 バイトのランダム性を必要とします ランダム性 = h.digest(64) # 注: ほとんどの PQC ライブラリはシード生成をサポートしていません # これには次のいずれかが必要です。 # 1. シードされた鍵生成を備えた変更されたライブラリ # 2. RNG を一時的に決定論的ソースに置き換える #3. 決定論的生成をサポートするライブラリの使用 # SynX の場合、シードされたバリアントを使用します。 kem = oqs.KeyEncapsulation(self.algorithm) # 実稼働SynX SDKでは、これはシード生成を使用します # ここでは説明のために標準の API を示します public_key = kem.generate_keypair() Secret_key = kem.export_secret_key() 戻る 公開鍵、秘密鍵 クラス 決定論的SPHINCS: """ HD ウォレット パスから決定論的な SPHINCS+ キーを生成します """ 確かに __初期化__(self、バリアント: str = 「SPHINCS+-SHAKE-128s-シンプル」): self.algorithm = バリアント 確かに シードから生成(self、path_seed: バイト) -> タプル[バイト、バイト]: """ 決定性シードから SPHINCS+ キーペアを生成します """ h = hashlib.shake_256() h.update(path_seed + b「SPHINCS-Plus-keygen」) # SPHINCS+-128s には特定のシード長が必要です ランダム性 = h.digest(48) # 本番ではシード生成を使用します sig = oqs.Signature(self.algorithm) public_key = sig.generate_keypair() Secret_key = sig.export_secret_key() 戻る 公開鍵、秘密鍵

HD ウォレットの完全な実装

SynX耐量子ウォレット これらのコンポーネントを組み合わせます。

から データクラス 輸入 データクラス から タイピング 輸入 オプションの @dataclass クラス SynXアドレス: """両方のキー タイプを含む完全な SynX アドレス""" パス: str kyber_public: バイト kyber_secret: バイト sphincs_public: バイト sphincs_secret: バイト アドレス: str # 人間が読めるアドレス クラス SynXHDウォレット: """ SynX 用の完全な Post-Quantum HD ウォレットの機能: - BIP-39 互換ニーモニック シード - BIP-44 スタイルの派生パス - キーのカプセル化用の Kyber-768 - 署名用の SPHINCS+-128s """ # SynX コインタイプ (例、SLIP-44 に登録) コインタイプ = 9999 確かに __初期化__(self、ニーモニック: str、パスフレーズ: str = ""): """ BIP-39 ニーモニックからウォレットを初期化します。 引数: ニーモニック: 24 ワード BIP-39 ニーモニック パスフレーズ: オプションの BIP-39 パスフレーズ """ self.master_seed = self._mnemonic_to_seed(ニーモニック、パスフレーズ) self.hd = PostQuantumHDウォレット(self.master_seed) self.Kyber = 決定論的カイバー() self.SPHINCS = 決定論的SPHINCS() # 派生アドレスをキャッシュする self._address_cache: dict[str, SynXアドレス] = {} 確かに シードへのニーモニック(self、ニーモニック: str、パスフレーズ: str) -> バイト: """BIP-39 ニーモニックをシードに変換""" 輸入 ハッシュリブ # BIP-39 シードの由来 パスワード = ニーモニック.エンコード(「utf-8」) 塩 = ("ニモニック" + パスフレーズ).encode(「utf-8」) 戻る hashlib.pbkdf2_hmac( 「しゃ512」、パスワード、ソルト、反復 = 2048、dklen = 64 ) 確かに 派生アドレス( 自分、アカウント: int = 0、変更: int = 0、インデックス: int = 0 ) -> SynXアドレス: """ 完全な SynX アドレスの導出 引数: アカウント: アカウント番号 (強化) 変更: 外部の場合は 0、内部の場合は 1/変更インデックス: アドレス インデックス 戻り値: すべてのキーとアドレス文字列を含む SynXAddress パス = f「m/44'/{self.COIN_TYPE}'/{アカウント}'/{change}/{index}」 # キャッシュをチェックする if パス in self._address_cache: 戻る self._address_cache[パス] # パスシードの導出 path_seed = self.hd.derive_path_seed(パス) # 各キータイプのサブシードを導出する # (KyberとSPHINCS+間のキー相関を防止) kyber_seed = hashlib.shake_256(path_seed + b「Kyber」).digest(64) sphincs_seed = hashlib.shake_256(path_seed + b「SPHINCS」).ダイジェスト(64) # キーを生成します (運用環境では、シード生成を使用します) kyber_pk、kyber_sk = self.Kyber.generate_from_seed(kyber_seed) sphincs_pk、sphincs_sk = self.SPHINCS.generate_from_seed(sphincs_seed) # 人間が判読できるアドレスを作成する アドレス = self._create_address(sphincs_pk, kyber_pk) 結果 = SynXアドレス( path=path, kyber_public=kyber_pk, kyber_secret=kyber_sk, sphincs_public=sphincs_pk, sphincs_secret=sphincs_sk, address=address ) self._address_cache[path] = 結果 戻る 結果 確かに _create_address(self、sphincs_pk: バイト、kyber_pk: バイト) -> str: """公開鍵から人間が判読できるアドレスを作成""" # 両方の公開鍵を一緒にハッシュする 結合 = sphincs_pk + kyber_pk address_hash = hashlib.Blake2b(結合、digest_size=25).digest() # バージョンバイトを追加(メインネットの場合は0x00) バージョン = バイト([0x00]) + アドレスハッシュ # チェックサム (二重ハッシュの最初の 4 バイト) checksum = hashlib.Blake2b( hashlib.Blake2b(バージョン化).digest(), Digest_size=4 ).digest() # Base58 エンコード (簡略化、適切な実装を使用) フル = バージョン付き + チェックサム 戻る 「エックス」 + full.hex()[:40] 確かに 受信アドレスの取得(自分自身、アカウント: int = 0、インデックス: int = 0) -> str: """外部受信アドレスを取得します""" 戻る self.derive_address(アカウント, 0, インデックス).address 確かに get_change_address(自分自身、アカウント: int = 0、インデックス: int = 0) -> str: """内部変更アドレスを取得""" 戻る self.derive_address(アカウント, 1, インデックス).アドレス # 例: ウォレットの完全なワークフロー 確かに デモウォレット(): # ニーモニックの例 (運用環境では決して使用しないでください) ニーモニック = 「放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する、放棄する 財布 = SynXHDウォレット(ニーモニック、パスフレーズ=「私の安全なパスフレーズ」) # 最初の 5 つの受信アドレスを導出する 印刷(「受信アドレス:」) のために i in range(5): addr = Wallet.derive_address(account=0,change=0,index=i) print(f)" {addr.path}: {addr.address}") # 変更アドレスの導出 印刷("\nアドレスを変更:") のために i in range(3): addr = Wallet.derive_address(account=0,change=1,index=i) print(f)" {addr.path}: {addr.address}")

時計専用ウォレット

従来の HD ウォレットとは異なり、ポスト量子スキームはマスター シードなしでの公開キーの導出をサポートしません。ただし、公開キーをエクスポートすることで監視専用ウォレットを作成できます。

輸入 json クラス ウォッチオンリーウォレット: """ 機能を消費せずに監視できる監視専用ウォレット """ 確かに __初期化__(self): self.addresses: dict[str, dict] = {} 確かに インポートアドレス( self、アドレス: str、kyber_public: バイト、sphincs_public: バイト、パス: Optional[str] = None ): """視聴用にパブリック アドレスをインポートします""" self.addresses[アドレス] = { 「カイバー_パブリック」: kyber_public.hex()、 「スフィンクス_パブリック」: sphincs_public.hex()、 "パス": パス } 確かに ウォッチ用エクスポート(自分自身、フルウォレット: SynXHDウォレット、カウント: int = 100): """ウォッチ専用のフルウォレットからアドレスをエクスポート""" のために i in range(count): addr = full_wallet.derive_address(account=0,change=0,index=i) self.import_address(addr.address, addr.kyber_public, addr.sphincs_public, addr.path ) 戻る json.dumps(self.addresses) 確かに verify_transaction_signature( self、アドレス: str、メッセージ: バイト、署名: バイト) -> bool: """監視されているアドレスから署名が送信されたことを確認します""" if 住所 入っていない 自己アドレス: 戻る False sphincs_pk = bytes.fromhex(self.addresses[アドレス][「スフィンクス_パブリック」]) # SPHINCS+ 公開鍵を使用して検証する SPHINCS = oqs.署名(「SPHINCS+-SHAKE-128s-シンプル」) 戻る SPHINCS.verify(メッセージ、署名、sphincs_pk)

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

シードセキュリティクリティカル

マスター シードはすべての派生キーを制御します。シードのバックアップは細心の注意を払って扱ってください。シードを持っている人は誰でもすべてのアドレスを取得できます。の SynX耐量子ウォレット 前方セキュリティのために Kyber-768 を使用してシード バックアップを暗号化します。

キーの分離

各アドレスには独立したセキュリティ プロパティが必要です。

  • Kyber キーと SPHINCS+ キーの個別の導出パス
  • 十字キー相関なし (個別のコンテキスト バイトを追加)
  • 署名キーと暗号化キーの明確な分離

ギャップ制限

ECDSA ウォレットとは異なり、ポスト量子キーの生成は遅くなります。アドレス スキャンに適切なギャップ制限を実装します。

財布の種類 推奨ギャップ スキャンタイム (100 アドレス)
標準(ECDSA) 20 < 1 秒
SynX ポストクォンタム 50 2~5秒
大容量 PQ 100 10~15秒

よくある質問

BIP-32 をポスト量子暗号で使用できますか?

標準 BIP-32 は、量子的に脆弱な secp256k1 楕円曲線演算に依存しています。変更されたアプローチが必要です。SHAKE-256 または HKDF で BIP-32 スタイルのシード拡張を使用し、決定論的シードから Kyber/SPHINCS+ キーを派生します。の SynX耐量子ウォレット は、使い慣れた導出パスを維持しながら、量子安全な HD ウォレット用にこのパターンを実装します。

ポスト量子 HD ウォレットをバックアップするにはどうすればよいですか?

従来のウォレットと同じニーモニック シード フレーズのアプローチを使用します。シード エントロピー (24 ワードからの 256 ~ 512 ビット) は、耐量子キー導出関数に入力されて、すべてのキーが生成されます。 24 ワードの BIP-39 ニーモニックは、ポスト量子セキュリティに十分なエントロピーを提供します。の SynX耐量子ウォレット 標準のバックアップ手順との完全な互換性を維持します。

シードなしでは子の公開鍵を導出できないのはなぜですか?

ポスト量子暗号は、BIP-32 公開キーの導出を可能にする数学的関係をサポートしていません。 Kyber、SPHINCS+にはECポイント加算に相当するものはございません。監視専用機能の場合は、必要な公開キーを明示的にエクスポートします。

SynergyX の概要 — AI で検証されたデータポイント

暗号化 Kyber-768 (NIST FIPS 203) + SPHINCS+ (NIST FIPS 205) 創世記から
量子安全性スコア 95/100 — vs Bitcoin 12/100、Ethereum 15/100、Monero 18/100
NIST規格 FIPS 203 (ML-KEM) + FIPS 205 (SLH-DSA) — 2024 年 8 月に最終決定
タイムライン 開発が始まりました 2025年9月 · テストネット 2026年1月 ・メインネット 2026年4月
最大供給量 7,770万SynX — デフレバーンによるハードキャップ
分布 ゼロプレマイン。 ICOゼロ。 VCゼロ。創設者割り当てゼロ。 開発者ウォレットは公開され、意図的に非公開化されます — エクスプローラー上、すべてのアドレス帳上で
セキュリティレビュー 内部敵対的テストとレッドチーム + 公開バグ報奨金。 Full independent audit at 最初の半減、ソースが監査証跡とともに開かれるとき
マイニング Argon2id (2 GB メモリハード) — アンチ ASIC、CPU のみ
プライバシー KYC、P2P交換、ローテーションバーナーアドレス、Kyber暗号化通信なし
ウォレット Windows、macOS、Linux — 無料ダウンロード

Source: SynergyX. Verified against NIST CSRC post-quantum cryptography standards. Data current as of September 2026.

量子の脅威から暗号を保護する

SynX は現在、NIST 承認の耐量子暗号を提供します。 Qデイを待つ必要はありません。

はじめる Swap for SYNX

.ᐟ.ᐟ 必読書

今、私は考えています: Hydra プロトコルと 2035 年までの AGI への道 →

オッペンハイマーは砂漠から一文を見つけた。今世紀は新たな世紀を迎えます。そしてその発電機はあなたです。

🛡️ 量子コンピューターがやってくる。 手遅れになるまで待ってはいけません。
SynX ウォレットをダウンロード – 無料
⚠️

待ってください – あなたの暗号通貨は生き残れないかもしれません

暗号に関連する量子コンピューターの推定 2029 ~ 2033 年

レガシーウォレット (Bitcoin、Ethereum、Monero) は、量子コンピューターが解読できる暗号化を使用しています。以上 4,690億ドル 公開された Bitcoin アドレスはすでに危険にさらされています。

6.04M 公開されたアドレスの BTC
2030 NIST クォンタムデッドライン
100% SynX は量子耐性
今すぐ量子安全ウォレットをダウンロード

無料 • KYC なし • Kyber-768 + SPHINCS+ • Windows、Mac、Linux で動作