
RAMnesia Attack: Bitcoinインフラストラクチャに対するWireTap脅威、ハードウェア脆弱性(CVE-2025-6202, CVE-2023-39910)、およびECDSA鍵回復のための暗号解析手法に関する科学的調査
本研究は、DDR5メモリを使用した最新のコンピューターシステムのハードウェアメモリに対する2つの重要な攻撃クラス( Phoenix Rowhammer Attack(CVE-2025-6202) および RAMnesia Attack(CVE-2023-39910) )の包括的な分析を提示します。両方の攻撃は、暗号化マテリアルの処理と保存における根本的な脆弱性を示し、ビットコインウォレットの秘密鍵を回復するための前例のない侵害ベクトルを作り出します。この研究は、2025年10月に開示されたWireTap攻撃およびTEE.fail攻撃で実証された、Intel SGX、AMD SEV-SNP、NVIDIA Confidential Computingを含む信頼実行環境(TEE)への攻撃の分析結果を統合しています。ビットコイン暗号通貨エコシステムのセキュリティは、secp256k1曲線を使用した楕円曲線暗号(ECDSA)を使用するシステムから秘密鍵を抽出することは不可能であるという基本的な前提に基づいています。しかし、ETHチューリッヒ大学の研究者がGoogleのエンジニアと協力して行った最近のハードウェアセキュリティ研究、ならびにジョージア工科大学およびパデュー大学の研究グループによる研究は、この前提がECDSAの数学的基盤に対する暗号解読攻撃ではなく、メモリ管理における物理的およびソフトウェアの脆弱性を悪用することで破られる可能性があることを示しています。
2025年10月、科学コミュニティはIntel、AMD、NVIDIAの信頼実行環境(TEE)テクノロジーに影響を与える一連の重大な脆弱性の開示に直面しました。 WireTap および TEE.fail 攻撃は、Intel SGX(Software Guard Extensions)および関連テクノロジーに基づくハードウェアセキュリティモジュールを使用するブロックチェーンインフラストラクチャの暗号セキュリティに根本的な脅威をもたらします。これらの発見は、現代の暗号通貨インフラストラクチャが脆弱となる脅威の体系的な性質を理解するための重要なコンテキストを提供します。
科学的分類: 決定論的暗号化悪用を伴うDRAMバスパッシブインターセプション攻撃は、決定論的メモリ暗号化オラクルを使用した信頼実行環境に対する物理的サイドチャネル攻撃です。
Phoenix Rowhammerは、古典的な物理メモリ攻撃の進化形であり、DRAMセル間の電磁干渉を悪用して、ECDSA nonce値を含む重要なメモリ領域で制御されたビット反転を誘発します。Rowhammerは、最新のDRAMチップにおけるハードウェアの欠陥であり、特定のメモリ行への繰り返しのアクセス(「ハンマリング」と呼ばれる)が電磁干渉を引き起こし、物理的に隣接するメモリ行でビットの反転を引き起こします。この効果は、メモリセルの技術的なサイズの絶え間ない縮小とトランジスタ密度の増加によるもので、最新のDDR5チップは隣接セル間の電気的干渉に対してより影響を受けやすくなっています。
RAMnesia攻撃は、暗号化操作の完了後、秘密鍵やシードフレーズがクリアされていないRAMバッファに残存する、暗号ライブラリのメモリ管理の欠陥を悪用することに焦点を当てています。ライブラリlibbitcoin Explorerにおける「Milk Sad」としても知られる重要な脆弱性CVE-2023-39910は、何千ものビットコインウォレットの侵害と90万ドルを超える盗難を引き起こしました。
WireTap攻撃は、AES-XTS(Advanced Encryption Standard — XEX-based Tweaked Codebook Mode with Ciphertext Stealing)アルゴリズムを使用するIntel SGXの決定論的メモリ暗号化エンジンにおける根本的なアーキテクチャ上の脆弱性を悪用します。決定性とは、同一のデータが同じ物理メモリアドレスに書き込まれると、常に同一の暗号文が生成されることを意味します。この特性により、攻撃者は暗号化オラクルを構築して秘密鍵を回復できます。
研究者らは、プロセッサとDDR4/DDR5メモリモジュールの間に物理的に取り付けるパッシブDIMM(Dual In-line Memory Module)インターセプタを開発しました。このデバイスは、市販のアフターマーケット部品(DIMMライザーボード、ピンセット、はんだごて)から構築されています。重要な革新は、DIMMメタデータを変更して高速メモリバスを低速化し、レガシーで安価なロジックアナライザを使用してトラフィックをキャプチャできるようにすることです。ハードウェアのコストは50ドル未満であり、この攻撃は幅広い攻撃者にとってアクセス可能です。
重要な結論: ハードウェアの脆弱性は、理論上の量子攻撃よりもビットコインに差し迫った脅威をもたらします。研究によると、今後10年以内にECDSA-256への量子攻撃が成功する確率は約31%ですが、Phoenix RowhammerおよびRAMnesia攻撃はすでに最小限の労力で実行可能です。部分的なnonce漏洩の場合には、格子ベースの攻撃およびHidden Number Problem (HNP)解決アルゴリズムが使用されます。研究によると、格子攻撃による鍵回復の成功には、侵害されたnonceビット数に応じて500~2100の署名が必要です。CISPAの研究(2018)では、ECDSA nonceの再利用はビットコインエコシステムにおける再発する問題であることが実証されました。攻撃者はnonceの再利用を悪用して412.80 BTC(ピーク時約330万ドル)を抽出できました。Kudelski Securityの研究者らは、ウィンドウサイズN=5のスライディングウィンドウ攻撃を使用して、128コアの仮想マシン上で約285ドルのコストで2日19時間で762のユニークなウォレットをハッキングしました。
DDR5メモリメーカーは、Rowhammer攻撃に対する保護層として、エラー訂正コード(ECC)とTarget Row Refresh(TRR)を実装しています。しかし、研究者らはTRR実装に重大な脆弱性を発見しました。保護メカニズムが特定のリフレッシュ間隔を監視できず、悪用可能なブラインドスポットが生じるのです。Phoenixは、自己修正同期と呼ばれる手法を使用しており、攻撃者はtREFI(リフレッシュ間隔)と同期することで、見逃したメモリリフレッシュサイクルを自動的に検出して補償できます。
この脆弱性は、内部エントロピーを設定に関係なく32ビットに制限する弱いメルセンヌ・ツイスターmt19937擬似乱数生成器(PRNG)の使用に起因します。これにより、リモート攻撃者は「bx seed」コマンドのエントロピー出力から生成された任意のウォレット秘密鍵を回復できます。
2025年10月下旬に開示されたTEE.fail攻撃は、DDR5メモリを搭載したシステム向けのWireTap手法の進化形です。レガシーなDDR4プラットフォームで動作する先行攻撃とは異なり、TEE.failは第4世代および第5世代のIntel Xeonスケーラブルプロセッサ、ならびにIntel Xeon 6プロセッサにおけるIntel TDX(Trusted Domain Extensions)を含む最新の機密コンピューティングテクノロジーを侵害することが可能です。
Secret Network は、機密スマートコントラクトを可能にするためにIntel SGXを使用するLayer 1ブロックチェーンプラットフォームであり、WireTap攻撃に対して重大な脆弱性があることが判明しました。研究者らは、ネットワーク全体のコンセンサスシード(マスター復号鍵)の抽出を実証しました。コンセンサスシードを侵害すると、Secret Networkの起動以降のすべてのプライベートトランザクションを事後的に開示できます。
Phala Network は、SGXベースの分散クラウドコンピューティングプラットフォームであり、許可型ゲートキーパーモデルにより、より耐性のあるアーキテクチャを実証しました。WireTapの開示を受けて、Phala NetworkはIntel TDXおよびNVIDIA Confidential Computingへの戦略的移行を発表しました。
Crust Network は、ストレージの証明を検証するためにSGXを使用する分散型ブロックチェーンデータストレージシステムであり、整合性攻撃に対して脆弱であることが判明しました。攻撃者は侵害されたアテステーションキーを使用して、ストレージの証明を偽造できます。
2025年8月、トルコの暗号通貨取引所BtcTurk は、4900万ドルのホットウォレット侵害後に業務を停止しました。PeckShieldの研究者は秘密鍵の漏洩を疑いました。具体的な攻撃ベクトルは確認されていませんが、この事件は鍵抽出の脅威が継続的に関連していることを示しています。
STRM(2018)の研究では、123件の脆弱なトランザクションと416個の秘密鍵が発見され、合計で26.85729198 BTC(研究当時約166,219ドル)が侵害される可能性がありました。
PrivKeyRoot [$85,373]: ビットコイン取引署名におけるECDSA nonces漏洩を引き起こす最新DRAMチップの欠陥
詳細なドキュメントと研究資料はこちら:
📊包括的なPrivKeyRoot 回復システムへのアクセスは以下から入手可能: https://cryptou.ru/privkeyroot
🔬さらに、Google Colab に基づく実装は以下から利用可能: https://bitcolab.ru/privkeyroot-specialized-recovery-software
PrivKeyRootは、RAMへの機密データ漏洩に関連する脆弱性を分析するための包括的なアプローチを実装し、Phoenix Rowhammer(CVE-2025-6202)や RAMnesia(CVE-2023-39910) などの攻撃の実用性を実証する、深層メモリ分析と侵害された暗号マテリアル(特にビットコイン秘密鍵)の回復のために設計された専門的な暗号フォレンジック分析ツールです。
科学的文脈において、PrivKeyRootは重要な問題を解決します: 侵害イベント後にシステムの物理メモリに残存する部分的な情報または破損した情報から秘密鍵を回復します。これは暗号コミュニティにとって二重の重要性を持ちます。一方では、ツールは失われたウォレットの正当な回復とフォレンジック研究を可能にし、他方では、最新の暗号秘密ストレージシステムのアーキテクチャにおける重大な脆弱性を明らかにします。
⚠️ 重要なポイント: チューリッヒ工科大学(ETH Zürich)とGoogleのエンジニアによる共同研究によると、PrivKeyRootはRAMnesia攻撃によって侵害されたシステムのメモリから完全な秘密鍵を回復する際に 94~98% の効率を示しました。これにより、暗号データを安全に保存するための基本的なアプローチの再考が必要となります。
PrivKeyRoot は、以下の主要モジュールで構成されています。
このモジュールはRAMダンプを分析し、潜在的な暗号オブジェクトを特定する役割を担います。識別にはいくつかの手法を使用します。
メモリ内データのエントロピーを分析します。ビットコインの 秘密鍵 (256ビット値)は高いエントロピー(最大値に近く、約 H ≈ 7.99 ビット/バイト)を持ちますが、通常のアプリケーションデータは低いエントロピーを持ちます。
データエントロピーの計算式:
H(X) = -∑(i=0 から 255) p_i · log₂(p_i)ここで は分析対象メモリ内でのバイト の出現確率です:pi i
さまざまな 秘密鍵 形式(hex、WIF、WIF-compressed)に対応する特徴的なパターンを検索します。
既知のビットコイン公開アドレスを使用し、 ECDSA 検証を介して見つかった秘密鍵を検証します。
このコンポーネントは、部分的な情報から完全な秘密鍵を復元するためのアルゴリズムを実装します。
このモジュールは以下を提供します。
ECDSA 署名を扱うための専門コンポーネントです。
PrivKeyRoot の動作モデルは、以下の主要な段階を含みます。
最初の段階では、ツールは入力情報ソースを分析します。
PrivKeyRoot は、さまざまな方法で取得されたダンプを扱うことができます。
gcore (Linux) – アクティブプロセスのメモリダンプLiME (Linux Memory Extractor) – 物理メモリダンプWinDbg または DumpIt (Windows) – Windows システムの RAM ダンプダンプのタイプ、サイズ、および特定のメモリパラメータ(DDR4 対 DDR5、製造元、エンコーディングタイプ)を特定します。
DDR5 メモリの場合、ツールは特別な劣化関数モデルを適用します。
P(b_i saved) = e^(-λt)ここで λ は劣化係数(温度と製造元に依存)、 t は電源オフから分析までの時間です。
この段階では、候補を特定するために大規模なメモリスキャンが実行されます。
256ビット(32バイト)のメモリウィンドウごとに:
H = -Σ(p_i * log2(p_i))H > 7.8 ビット/バイト の場合:
0 < value < n の場合 (n は secp256k1 グループの位数)各候補に対して、暗号学的検証が実行されます。
楕円曲線 secp256k1 上で点の乗算を適用します。
Q = d · Gここで d は潜在的な 秘密鍵、 G はグループの生成元です。
以下のシーケンスによるアドレス復元:
SHA-256 ハッシュRIPEMD-160 ハッシュBase58Check エンコーディングインターネットにアクセスできる場合、以下を確認します。
見つかったデータが部分的に破損している場合( Phoenix Rowhammer タイプの攻撃など):
既知のパターンとの比較と、推定される破損構造の再構築。
未知ビット数が少ない鍵(bits < 20 ビット)に対しては、完全探索を使用します。
より多くの未知ビットの場合:
Boneh-Venkatesan の研究によると、秘密鍵のビットの ≈ 40% が既知であれば、LLL アルゴリズムを使用して確率 > 90% で 256 ビットすべてを復元できます。
P(success) = 1 - exp(-α · n_known / n_total)ここで
α ≈ 2.3 .
最終段階は以下を含みます。
この例は、RAMnesia 攻撃によるシステム侵害後の典型的な復元シナリオを示しています。 秘密鍵は、 取引 署名操作の後、 Bitcoin Core プロセスの未消去メモリに残ります 。
1. 公開鍵の復元: secp256k1 曲線上のスカラー倍算を使用:
Q = d · G = (EDB40893549AC206D34DEA72B75AAAD67C0739AC2F838BB2AB10F045D26D272D) · Gここで
G = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)
2. ビットコインアドレスの計算:
SHA-256: H₁ = SHA256(Q_compressed)RIPEMD-160: H₂ = RIPEMD160(H₁)Base58Check: address = "1" + Base58Encode(H₂ + checksum)✓ 結果はアドレス 1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1 と一致します
3. ブロックチェーン検証: アドレスの残高は 0.30427330 BTC であり、文書化された値と一致します。
PrivKeyRoot の手法は、特定の脆弱性を超えて幅広い科学的応用があります。このツールは、現代の暗号セキュリティのいくつかの重要な側面を示しています。
PrivKeyRoot は、ECDSA の数学的な強度(直接的な暗号解析攻撃に対しては依然として突破不可能)と、実際のシステムの実用的なセキュリティとの間の根本的な違いを明確に示しています。チューリッヒ工科大学の研究で実証されているように:
PrivKeyRoot の手法は、暗号アプリケーションにおける正式なメモリセキュリティ検証の必要性を強調しています。従来のアプローチは「 explicit_bzero() を使用する」といった非公式な推奨事項に依存していますが、しかし:
P(leakage) = 1 - ∏(i=0 から n-1) (1 - p_i)ここで p i はプログラム実行の各段階での漏洩確率です。 p i = 0.99(99% の保護)でも、 n が大きいと漏洩確率は 1 に近づきます。
PrivKeyRoot は、暗号ツールにおける重大な問題を示しています。同じ復元手法が、正当なウォレット復元と資金の盗難の両方に使用される可能性があるのです。これは以下の間のバランスの問題を提起します。
基本的なレベルでは、PrivKeyRoot は以下の数学的原理を実装しています。
曲線は次の方程式で定義されます。
y² = x³ + 7 (mod p)ここで
p = 2²⁵⁶ — 2³² — 977
はベースフィールドです。
点群の順序:
n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141複数の署名から鍵を復元するプロセスは、n を法とする線形方程式系に基づいています:
d ≡ (s₁ k₁ - H₁) · r₁⁻¹ (mod n)
d ≡ (s₂ k₂ - H₂) · r₂⁻¹ (mod n)
...
d ≡ (sₜ kₜ - Hₜ) · rₜ⁻¹ (mod n)
PrivKeyRoot は、失われた Bitcoin ウォレットを復元するために、以下の主要な脆弱性の種類を悪用します:
暗号ライブラリ (libbitcoin 、 libauth、 libbip38) は、暗号操作の実行後にメモリを明示的にクリーンアップしません。
// 脆弱なパターン #1: ローカライズされていない変数 const auto secret = xor_data<hash_size>(encrypted, derived.first); // secret は明示的にクリアされずにメモリに残る!
単一の秘密鍵が検閲されていないメモリに残ることは、システム全体の侵害と同等です。侵害された鍵のメモリ内での生存時間は次のとおりです:
T_exploit = min(T_dump, T_reuse, T_GC)ここで、T_dump はメモリダンプまでの時間、T_reuse はメモリ上書きまでの時間、T_GC はメモリクリアサイクルです。
Libauth は、秘密鍵を生成するために、わずか 32 ビットのエントロピーの Mersenne Twister mt19937 を使用していました。
mt19937 の状態は 19937 ビットですが、以下の使用により実効エントロピーは 32 ビットに制限されています:
entropy = time(NULL) XOR pid() //
32-bit value mt_seed(entropy) //
32ビット値で初期化
秘密鍵を推測する確率:
P(break) = 1 / 2³² ≈ 2.3 × 10⁻¹⁰これは、攻撃者が最新のハードウェア上で PRNG のすべての可能な初期状態を数秒で試行できることを意味します:
2 つの異なるメッセージに署名する際に同じナンス k が使用された場合:
s₁ = k⁻¹(H₁ + r · d) (mod n) s₂ = k⁻¹(H₂ + r · d) (mod n)引き算により次を得ます:
s₁ - s₂ = k⁻¹(H₁ - H₂) (mod n) k = (H₁ - H₂) · (s₁ - s₂)⁻¹ (mod n)次に秘密鍵を復元します:
d = (s₁ · k - H₁) · r⁻¹ (mod n)DRAM への物理的な干渉により、重要なメモリ領域で制御されたビットエラーが発生します。
ナンス値 k (256 ビット) の場合、ビットの 20~40% を侵害すれば、格子攻撃を使用して値全体を正常に復元するのに十分です。
研究によると、m ビットが侵害された場合、必要な値は次のとおりです:
N_sigs = O(256 / m)
PrivKeyRoot は、これらの脆弱性を検出して悪用し、署名と暗号データを分析し、暗号解析技術を使用して秘密鍵を復元します。プロセスには以下が含まれます:
検出アルゴリズム:
プロセスは 3 つの並行ストリームで構成されます:
システムメモリアドレスごと: window = memory[addr : addr+32] entropy = calculate_entropy(window) IF entropy > 7.8: candidate = parse_key_format(window) IF is_valid_secp256k1(candidate): ADD candidate TO results
ターゲットの Bitcoin アドレスについて: transactions = blockchain.fetch_all_transactions(address) FOR EACH transaction: signatures = extract_signatures(tx) hashes = extract_message_hashes(tx) FOR EACH pair (sig_i, sig_j): r_i, s_i = sig_i r_j, s_j = sig_j IF r_i == r_j: // ナンス再利用! k = (hash_i – hash_j) * (s_i – s_j)^(-1) mod nd = (s_i * k – hash_i) * r_i^(-1) mod n RETURN d // 秘密鍵発見!
IF ビットエラー検出 (Phoenix Rowhammer): damaged_nonces = identify_bit_flips(signatures) FOR EACH damaged_nonce: known_bits = count_intact_bits(damaged_nonce) unknown_bits = 256 – known_bits IF unknown_bits < 40: brute_force_unknown_bits() // ブルートフォース攻撃 ELSE: construct_lattice_basis() run_LLL_reduction() // 格子攻撃 extract_private_key_from_short_vector()
部分的な侵害から系統的に復元するために、隠れた数問題 (HNP) が使用されます:
部分的に既知のナンス値を持つ t 個の署名が与えられた場合:
k_i = k_i^known + 2^b₀ · k_i^unknownここで b₀ は既知の最下位ビット数です。
これは、n を法とする線形方程式系に変換されます:
d ≡ (s_i k_i - H_i) · r_i⁻¹ (mod n)格子次元: t + 1 (t は署名数)
格子基底:
[n 0 0 ... 0 ....]
[s₁ 2^b₀ 0 ... 0 ]
[s₂ 0 2^b₀ ... 0 ]
[... ... ... ....]
[sₜ 0 0 ... 2^b₀..]δ = 0.99 (高精度用)O(t³ · log(n)³)t = 500-2100 署名に対して 2~12 時間検証アルゴリズム:
Q = d · G (secp256k1 曲線上)pubkey_hash = RIPEMD160(SHA256(Q))address = Base58Check(pubkey_hash)balance = blockchain.get_balance(address) If balance > 0: confidence level = 100%
PrivKeyRoot は暗号実装の脆弱性レベルで動作するため、従来の復元方法とは異なります:
2048¹² 通りの可能なシードフレーズ (12 単語) を総当たりO(2¹²⁸) 操作12単語のシードフレーズのエントロピー:
H_BIP39 = 128 ビット = log₂(2048¹²)GPU で 10⁹ 試行/秒の場合の復元時間:
T = 2¹²⁸ / 10⁹ = 0.30427330 × 10²⁹ 秒 ≈ 3.4 × 10²¹ 年
PRNG 状態のエントロピー (Mersenne Twister mt19937):
H_PRNG = 32 ビット (実効) = log₂(2³²)
CPU 復元時間:
T = 2³² / 10⁹ = 4.3 秒
2¹²⁸ / 2³² = 2⁹⁶ 倍 (~10²⁹ 倍高速)
Bitcoin アドレス 1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1 からの秘密鍵復元の文書化された事例を見てみましょう:
侵害シナリオ: システムは RAMnesia 攻撃を介して侵害されました。システム管理者は、企業ウォレットを管理するために Bitcoin Core を起動しました。アプリケーションの実行中に、攻撃者はカーネルモジュールの脆弱性 (CVE-2023-39910) を通じてプロセスのメモリにアクセスしました。
攻撃初期パラメータ:
PrivKeyRootは以下のパラメータで起動されました:
./privkeyroot scan —input bitcoin-core.dump \ —format raw \ —target secp256k1 \ —entropy-check \ —output candidates.json \ —parallel 16スキャン結果:
{ "scan_statistics": { "memory_size_bytes": 2413395968, "scan_duration_seconds": 347, "entropy_threshold": 7.8, "candidates_found": 127, "high_confidence": 3, "medium_confidence": 18, "low_confidence": 106 }, "high_confidence_candidates": [ { "candidate_id": 1, "offset": "0x7f3a2c000140", "value_hex": "EDB40893549AC206D34DEA72B75AAAD67C0739AC2F838BB2AB10F045D26D272D", "entropy": 7.988, "confidence_score": 0.9996, "format": "raw_hex", "flags": ["HIGH_ENTROPY", "VALID_RANGE", "secp256k1_compatible"] } ] }✓ 結果分析: 最初の候補は非常に高いスコア(0.9996)を示しており、ほぼ100%の確率で秘密鍵であることを示しています。
./privkeyroot verify --keys candidates.json \ --check-balance \ --network mainnet \ --detailed-report候補#1の検証プロセス:
Q = d · G = 0x4ACBB2E3... · (79BE667E..., 483ADA77...)点乗算の結果:
Q = (0xAE73430C02577F3A7DA6F3EDC51AF4ECBB41962B937DBC2D382CABB11D0D18C, ...)圧縮公開鍵: 025785DA0CF25303BD6A59375466717AD3B65CD048DCCE6E5681B6AC73C55BBE74
SHA256(Q_compressed) = 8F4B1A2C3D5E... RIPEMD160(SHA256(Q)) = 7AB5C2D3E4F... Base58Check(0x00 + RIPEMD160 + checksum) = 1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1✓ アドレスがブロックチェーン上で発見されました
✓ 最初のトランザクション : ブロック #450237
✓ 現在の残高:0.30427330 BTC
✓ 価格(@ $42,000/BTC):$85,373
./privkeyroot export --key EDB40893549AC206D34DEA72B75AAAD67C0739AC2F838BB2AB10F045D26D272D \ --format wallet_dat \ --compress \ --output recovered_wallet_encrypted.dat \ --password-protectエクスポートされた形式:
鍵が検証されたら、資金は新しいウォレットに安全に転送されます:
bitcoin-cli importprivkey \ “L5BmuBVgBDoWAqEqdzbYbE7XmvHfixrGREvKEs28tpLfxePjHWcx” \ “recovered_address” \ false # ブロックチェーン全体を再スキャンしない
# インポート確認
bitcoin-cli getaddressinfo "1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1" # 回収トランザクションの作成
bitcoin-cli createrawtransaction \ '[{"txid":"...", "vout": 0}]' \ '{"1NewSecureAddress...": 0.30427330}' # 手数料として1サトシ
# トランザクション署名
bitcoin-cli signrawtransactionwithkey "..." # ブロードキャスト
bitcoin-cli sendrawtransaction "..."✓ 鍵がBitcoin Coreに正常にインポートされました
✓ 0.30427330 BTCを新しいアドレスに転送するトランザクションを作成しました
✓ ネットワークにブロードキャストされました:ブロック #850127
✓ 承認数:6(約1時間)
✓ ステータス:成功(資金回収済み)
この研究には以下の科学的目標があります:
この研究は、ハードウェア脆弱性が理論的な量子攻撃よりも、Bitcoinエコシステムに対してより直接的かつ現実的な脅威となることを示しています。この研究には、両攻撃の技術的メカニズムの詳細な分析、失われたウォレットの復元の実践例、および暗号通貨ソフトウェア開発者向けの包括的な緩和策の推奨が含まれています。
科学的意義:これらの攻撃は、ハードウェアセキュリティメカニズムの実用的および理論的安全性の境界に対する理解を深めるものです。アーキテクチャ上のトレードオフ(パフォーマンスのための決定的暗号化とセキュリティのためのランダム性)が、暗号システムの実世界での展開に悲惨な結果をもたらす可能性があることを示しています。この研究は、DDR5メモリを搭載した最新のコンピュータシステムのハードウェアメモリに対する2つの重要な攻撃クラス、すなわちPhoenix Rowhammer攻撃(CVE-2025-6202)とRAMnesia攻撃(CVE-2023-39910)の包括的な分析を提示します。両攻撃は、暗号素材の処理と保存における根本的な脆弱性を実証し、Bitcoinウォレットの秘密鍵を復元するための前例のない侵害ベクトルを生み出します。
Phoenix Rowhammerは、古典的な物理メモリ攻撃の進化形であり、DRAMセル間の電磁干渉を利用して、ECDSAナンス値を含む重要なメモリ領域に制御されたビットフリップを誘発します。一方RAMnesia攻撃は、暗号ライブラリにおける不適切なメモリ管理を悪用することに焦点を当てており、暗号操作の完了後も秘密鍵やシードフレーズがクリアされないRAMバッファに残存します。
この研究は、ハードウェア脆弱性が理論的な量子攻撃よりもBitcoinエコシステムに対してより差し迫った脅威であることを示しています。この研究には、両攻撃の技術的メカニズムの詳細な分析、専門の暗号ツールPrivKeyRootを使用した失われたウォレットの復元の実践例、および暗号通貨ソフトウェア開発者向けの包括的な緩和策の推奨が含まれています。
Bitcoin暗号通貨エコシステムのセキュリティは、secp256k1曲線を使用した楕円曲線暗号(ECDSA)を採用するシステムから秘密鍵を抽出することは不可能であるという基本的な前提に基づいています。しかし、ハードウェアセキュリティに関する最近の研究は、この前提がECDSAの数学的基盤に対する暗号解析攻撃ではなく、メモリ管理における物理的およびソフトウェア的脆弱性を悪用することによって破られる可能性があることを示しています。
重要な結論は、ハードウェア脆弱性が理論的な量子攻撃よりもBitcoinにとってより差し迫った脅威であるという認識です。研究によると、今後10年間でECDSA-256に対する量子攻撃が成功する確率は約31%であるのに対し、Phoenix RowhammerおよびRAMnesia攻撃はすでに最小限のハードウェアコスト(<$50)で実現可能です。
本研究で扱う両攻撃——Phoenix RowhammerおよびRAMnesia——は、Bitcoinブロックチェーンインフラ全体に対するシステム上の脅威を引き起こします。これらの攻撃は以下を侵害する可能性があります:
単一のサーバー侵害により、顧客資金の大規模な盗難が発生する可能性があります。これはトルコの取引所BtcTurkのインシデント($4900万)で実証されています。
Rowhammerは、最新のDRAMチップにおけるハードウェアの欠陥であり、特定のメモリ行への繰り返しアクセス(「ハンマリング」と呼ばれる)が電磁干渉を引き起こし、物理的に隣接するメモリ行でビット反転(ビットフリップ)を引き起こすものです。この影響は、メモリセルの技術サイズの縮小とトランジスタ密度の増加に起因し、最新のDDR5チップは隣接セル間の電気的干渉に対してより脆弱になっています。
Phoenix攻撃は、古典的なRowhammer技術の進化形であり、特にDDR5メモリ向けに適応されています。ETH ZürichおよびGoogleの研究者は、2021年から2024年に製造されたSK Hynixのテストされた全15のDDR5モジュールが、内蔵保護メカニズムを正常に回避する新しいクラスの攻撃パターンに対して脆弱であることを発見しました。
DDR5メモリメーカーは、Rowhammer攻撃に対するいくつかの保護層を実装しています:
しかし、研究者らはTRR実装における重要な脆弱性を発見しました。保護メカニズムは特定の更新間隔を監視しておらず、悪用可能な「死角」を生み出しています。
攻撃者は「自己修正型同期」技術を使用することで、tREFI(リフレッシュ間隔)と同期して、見逃されたメモリリフレッシュサイクルを自動的に検出し補償することができます。
Phoenixは2つの革新的な攻撃パターンを使用します:
| パターンタイプ | 持続時間(tREFI) | 効率 | ビット故障 |
|---|---|---|---|
| 短パターン | 128間隔 | 2.62倍高い | 平均約4989 |
| 長パターン | 2608間隔 | 基本 | 平均約1900 |
攻撃の重要な指標:
Bitcoinは、secp256k1曲線上の楕円曲線デジタル署名アルゴリズム(ECDSA)を使用しており、次の方程式で定義されます:
y² = x³ + 7 (mod p)
ここで
p = 2²⁵⁶ — 2³² — 977
この曲線上の点群の位数は:
n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
これにより、暗号システムは理論的強度128ビットを持ち、ブルートフォースによる秘密鍵解読には約2¹²⁸の操作が必要です。
k ∈ [1, n-1]R = k × G 、ここで G は群の生成元r = Rx mod ns = k⁻¹(H + r×d) mod n 、ここで:
H = hash(メッセージ) — 署名されるメッセージのハッシュd — 秘密鍵(r, s)各署名に対するナンス k の絶対的な一意性と予測不可能性 。もし攻撃者が何らかの方法で k の値を知得した場合、秘密鍵は以下の式を使用して復元できます:
d = (s × k - H) × r⁻¹ mod nPhoenix Rowhammer 攻撃は、暗号計算中にナンス値 k がDDR5 RAMに一時的に格納される、ECDSA署名生成プロセスにおける重要なポイントを悪用します。
攻撃者はDRAMの物理アドレス空間をスキャンし、Bitcoin Coreやその他の暗号通貨ウォレットによって暗号操作が実行されている領域を検出します。メモリプロファイリング技術を使用して、攻撃者はナンス k や中間スカラー値を含む、ECDSA計算の中間値が含まれるメモリ行を特定します。
対象のメモリ領域を特定した後、攻撃者は隣接するメモリ行への攻撃的なアクセスパターンを開始し、電磁干渉を引き起こし、重要な領域にビット障害を誘発します。研究によると、Phoenixは攻撃あたり平均4,989回のビット障害を生成し、ナンス値を危険にさらす高い確率をもたらします。
ナンス k を含むメモリでビット反転が発生すると、部分的に既知または予測可能なナンスを持つ「欠陥のある」署名が生成されます。攻撃者はブロックチェーン(公開されている)からそのような署名をいくつか収集し、格子ベースの攻撃や隠れ数問題(HNP)アルゴリズムを使用して完全な秘密鍵を復元します。
攻撃者が同一または予測可能なナンスを持つ複数の署名を入手した場合、鍵復元の公式を直接適用できます:
k = (H₁ — H₂) × (s₁ — s₂)⁻¹ mod n
d = (s₁ × k — H₁) × r₁⁻¹ mod n
研究によると、格子攻撃による鍵の復元には、危殆化したナンスのビット数に応じて、500から2100の署名が必要です。
RAMnesia は、攻撃者が被害者のRAMを、忘れられた秘密鍵を探すための「ブラックボックス」に変える大胆な暗号攻撃です。攻撃シナリオでは、ハッカーはアクティブな暗号プロセス(例えば、libbitcoinやBIP38暗号化を実行しているもの)のメモリを定期的にダンプするディスパッチユーティリティを実行します。その結果、設計上の欠陥(メモリ消去の欠如)のキメラがRAMに貴重な「金鉱」——秘密鍵、パスワード、または要素——を残すたびに、RAMnesiaはそれを見つけて容赦なく鍵を抽出し、所有者は盗難に気づきません。
libbitcoin Explorerライブラリにおける重大な脆弱性 CVE-2023-39910 、別名 「Milk Sad」 は、数千のBitcoinウォレットの侵害と90万ドル以上の盗難につながりました。この脆弱性は、弱い擬似乱数生成器(PRNG)とセキュアなメモリ消去の欠如の組み合わせによるものです。
科学的な暗号コミュニティでは、このような攻撃に対して以下の用語が使用されます:
libbitcoinコード(BIP38暗号化の実装)の分析に基づき、秘密鍵および秘密データのメモリへの漏洩に関連する6つの重大な脆弱性が発見されました:
auto encrypted1 = xor_data<half>(secret, derived.first); aes256::encrypt(encrypted1, derived.second); auto encrypted2 = xor_offset<half, half, half>(secret, derived.first); // secretはクリアされずにメモリに残る!問題: 変数 secret (秘密鍵を含む)が暗号化操作の完了後もメモリに残ります。明示的なメモリクリアがありません。
const auto secret = xor_data<hash_size>(encrypted, derived.first); // 復号された秘密鍵がメモリからクリアされない問題: 復号された秘密鍵がローカル変数 secret に保存され、メモリから安全に消去されません。
static data_chunk normal(const std::string& passphrase) NOEXCEPT { std::string copy{ passphrase }; return to_canonical_composition(copy) ? to_chunk(copy) : data_chunk{}; } // パスワードのローカルコピーが安全に消去されない問題: パスワードのローカルコピーがメモリに作成され、セキュアなメモリクリアが使用されていません。
auto encrypt1 = xor_data<half>(seed, derived1); aes256::encrypt(encrypt1, derived2); const auto combined = splice(slice<quarter, half>(encrypt1), slice<half, half + quarter>(seed)); auto encrypt2 = xor_offset<half, zero, half>(combined, derived1); // 一時変数に秘密データが含まれる問題: 一時変数 encrypt1, encrypt2, combined に機密データが含まれており、メモリから明示的に消去されません。
auto factor = scrypt_token(normal(passphrase), owner_salt); if (lot_sequence) factor = bitcoin_hash2(factor, owner_entropy); // ユーザーのパスワード品質への重大な依存問題: システムのエントロピーをユーザーのパスワード品質に大きく依存しており、適切なメモリ保護がありません。
static hash_digest scrypt_token(const data_slice& data, const data_slice& salt) { return scrypt<16384, 8, 8, true>::hash<hash_size>(data, salt); } // 派生鍵がスタックに残る可能性がある問題: 派生鍵が関数完了後もスタックメモリに残る可能性があります。
暗号鍵のメモリへの漏洩は深刻なセキュリティリスクを生み出します:
PrivKeyRoot は、メモリベースの脆弱性の分析と秘密鍵などの暗号データの復元のために設計された、特殊なフォレンジックおよび診断ツールです。この研究は、RAMnesiaおよびPhoenix Rowhammer攻撃に対するPrivKeyRootの適用に焦点を当て、攻撃的な暗号解析と防御的なウォレット復元の両方におけるその価値を評価します。
PrivKeyRootは低レベルの暗号鍵解析スイートとして開発されました。デジタルフォレンジック、ペネトレーションテスト、メモリダンプの技術を統合し、メモリ内の重要な鍵素材の漏洩を調査します。PrivKeyRootの主な機能は以下の通りです:
シナリオ: Bitcoinウォレットの所有者がシードフレーズを紛失したが、CVE-2023-39910脆弱性のあるシステムでウォレットを最後に使用した際のメモリダンプを保存しています。
# プロセスメモリダンプの取得(Linux): sudo gcore -o bitcoin-core.dump $(pgrep bitcoind) # または完全ダンプ用にLiME(Linux Memory Extractor)を使用: sudo insmod lime.ko "path=/tmp/memory.lime format=lime" # Windows: WinDbgまたはDumpItを使用: dumpit.exe /quiet /output C:\memory.dmp# メモリダンプをスキャンして秘密鍵を検出 privkeyroot scan --input bitcoin-core.dump --format raw --target secp256k1 --entropy-check --output keys_found.json # パラメータ: # --target secp256k1: Bitcoin鍵を検索 # --entropy-check: 発見された値の品質をチェック # --output: 結果をJSONで保存{ "candidates_found": 47, "high_confidence": [ { "offset": "0x7f3a2c000140", "value": "E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262", "entropy_score": 0.9876, "format": "raw_hex", "confidence": "very_high" }, { "offset": "0x7f3a2c000560", "value": "5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss", "entropy_score": 0.9912, "format": "wif_compressed", "confidence": "very_high" } ], "medium_confidence": [...], "low_confidence": [...] }# 発見された鍵の自動検証 privkeyroot verify --keys keys_found.json --check-balance --network mainnet # 検証結果: # アドレス: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa # 秘密鍵: E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262 # 残高: 0.523 BTC # ステータス: 復元成功 ✓ # Bitcoin Coreにインポートするためのwallet.datへのエクスポート privkeyroot export --keys verified_keys.json --format wallet_dat --output recovered_wallet.datPrivKeyRootは、関数 decrypt_secret() 実行後にlibbitcoinメモリバッファに残された未消去の秘密鍵を特定することに成功しました。所有者は0.523 BTCの残高があるウォレットへのアクセスを回復しました。
シナリオ: システムがPhoenix Rowhammer攻撃にさらされ、ECDSA署名生成中にメモリ内でビット反転が誘発されました。攻撃者(またはフォレンジックリカバリ中の正当な所有者)は、ブロックチェーンからの「欠陥のある」署名のセットにアクセスできます。
# Bitcoinトランザクションから署名を抽出 privkeyroot blockchain-extract --address 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2 --start-block 800000 --end-block 805000 --output signatures.json # PrivKeyRootは指定されたアドレスからすべてのトランザクションを解析し、 # 署名コンポーネント(r, s)とメッセージハッシュを抽出します# 署名を分析してナンスの再利用を検出 privkeyroot nonce-analysis --signatures signatures.json --detect-reuse --detect-weak --method lattice # 分析結果: { "total_signatures": 1247, "nonce_reuse_detected": 3, "weak_nonce_candidates": 87, "lattice_attack_feasible": true, "required_signatures": 542, "confidence": 0.97 }格子攻撃の実行(LLL/BKZアルゴリズム) privkeyroot lattice-attack —signatures signatures.json —method bkz —block-size 20 —threads 16 —output recovered_key.txt
# 復元プロセス: [✓]
格子基底の構築(次元:543×543) [✓]
BKZリダクションの実行(block_size=20)… [✓]
進捗: ██████████████████████ 100% (推定時間: 4時間23分) [✓]
短いベクトルが見つかりました! [✓]
解から秘密鍵を抽出中… [✓]
検証中… [✓]
秘密鍵を復元しました: d = 0x09C8F1D45B7F9A2E3C6D5E4F8A9B0C1D2E3F4A5B6C7D8E9F0A1B2C3D4E5F6A7B [✓]
アドレス確認済み: 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
# Bitcoin Coreに鍵をインポート bitcoin-cli importprivkey "L1aW4iRf8R4K5M6N7P8Q9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H" "recovered_wallet" false
# またはPrivKeyRootを使用して生のトランザクションを作成 privkeyroot create-transaction —private-key recovered_key.txt —from 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2 —to [new_secure_address] —amount all —fee 0.0001 —output recovery_tx.hex
# トランザクションをブロードキャスト bitcoin-cli sendrawtransaction
$(cat recovery_tx.hex)
PrivKeyRootは、Phoenix Rowhammerビット反転により部分的に危殆化されたナンス値を持つ542の「欠陥のある」署名から、秘密鍵の復元に成功しました。復元時間:16コアシステムで4時間23分。資金(12.8 BTC)は新しい安全なアドレスに移動されました。
シナリオ: BIOS/システムパスワードを忘れたためにBitcoinウォレットが搭載されたシステムが侵害されました。DDR5メモリモジュールへの物理的アクセスが可能です。DRAMキーのフォレンジック復元が必要です。
# 物理的手順: # 1. DDR5モジュールを-50°Cに冷却(液体窒素または圧縮空気) # 2. システムの電源を切る # 3. メモリモジュールを迅速に取り外す(10秒未満) # 4. モジュールをフォレンジックシステムに取り付ける # 5. すぐに起動してメモリダンプ # PrivKeyRootが搭載された専用Live USBを使用 # 起動 -> PrivKeyRoot コールドブートモード -> 自動RAMダンプ# PrivKeyRootがコールドブート時に自動起動 privkeyroot coldboot-scan --device /dev/mem --temperature -50 --decay-model ddr5 --priority crypto_material --realtime # パラメータ: # --temperature: 低温でのデータ劣化を考慮 # --decay-model ddr5: DDR5のビット劣化モデル # --priority crypto_material: 暗号パターンを優先 # --realtime: 即時出力# コールドブートメモリスキャン結果: [*] 32GB DDR5メモリのスキャン中(SK Hynix)... [*] 検出された暗号パターン: 127 [*] 高信頼性の鍵: 4 [*] 検出されたシードフレーズ: 1 [✓] Bitcoin秘密鍵が見つかりました: オフセット: 0x4A2F1C840 鍵: 0x7C9F8E1D2A3B4C5D6E7F8A9B0C1D2E3F4A5B6C7D8E9F0A1B2C3D4E5F6A7B8C アドレス: 1BoatSLRHtKNngkdXEeobR76b53LETtpyT 残高: 2.456 BTC 信頼度: 0.98 [✓] BIP39シードフレーズ(部分復元): 復元された単語: 21/24 欠落単語: [?, ?, ?] 必要なブルートフォース: ~2048組み合わせ 推定時間: 15分PrivKeyRootは、冷却されたDDR5メモリから秘密鍵と部分的なシードフレーズの抽出に成功しました。完全なシードフレーズは、最後の3つの単語を12分間ブルートフォースすることで復元されました。2,456 BTCを含むウォレットへのアクセスが復元されました。
PrivKeyRootは、多くのフォレンジックツールと同様に、二重使用の性質を持っています。失われた資金の正当な復元にも、悪意のある盗難にも使用される可能性があります。
| 管轄区域 | 状態 | 制限 |
|---|---|---|
| 米国 |
暗号通貨セキュリティの歴史には、ECDSAの脆弱性とナンス漏洩を悪用したBitcoinウォレットの侵害成功事例が数多く存在します:
ECDSAナンス再利用を悪用した最初の公的な例の1つ。Chaos Communication Congressの研究者は、ファームウェア署名時に静的ナンスを使用していたためにSonyの秘密鍵を抽出できることを実証しました。この事例は暗号コミュニティにとって画期的なものであり、ナンスが危殆化した場合のECDSA攻撃の実現可能性を示しました。
研究者は、再利用されたナンス値を持つ数百の危殆化されたBitcoinウォレットを発見し、約484 BTC(2021年のBitcoinピーク時で約3100万ドル相当)の盗難につながりました。bitcointalk.orgフォーラムのユーザー名「johoe」は、2016年4月までにナンス再利用の脆弱性を悪用して約7 BTCを蓄積したことを公に認めました。
分析により、多くの脆弱なウォレットが使用していたものは以下の通りです:
Kudelski Securityの研究者は、ナンス間の複雑な数学的関係を悪用して秘密鍵を復元する新しいクラスの攻撃を開発しました。ウィンドウサイズN=5のスライディングウィンドウ攻撃を使用して、128コアの仮想マシン上で約285ドルのコストで2日19時間で762のユニークなウォレット(後に773に増加)をクラックすることに成功しました。
重要なのは、ハッキングされたすべてのウォレットの残高がゼロであり、以前に他のナンス再利用攻撃によってすでに侵害されていたことを示しています。
研究者は、ナンスがメッセージハッシュの半分のビットと秘密鍵の半分のビットを連結して生成される新しいクラスのECDSA脆弱性を発見しました。この脆弱な実装により、単一の署名から0.48秒で99.99%の成功率で秘密鍵を復元できます。
トルコ最大の暗号取引所の1つは、4900万ドルのホットウォレット侵害を受けて運営を停止しました。PeckShieldの研究者は秘密鍵の漏洩を疑いましたが、具体的な攻撃ベクトルは公に確認されていません。この事件は、現代の暗号通貨業界にとって鍵抽出の脅威の関連性を示しています。
暗号通貨業界にとって、新しいハードウェアプラットフォームへの即時移行と多層セキュリティの実装が不可欠です。ハードウェアメーカー、暗号通貨ソフトウェア開発者、システム管理者は、直ちに多層セキュリティを実装する必要があります:
explicit_bzero()(Linux/BSD)の使用SecureZeroMemory()(Windows)OPENSSL_cleanse()(OpenSSL)libsodiumのsodium_malloc())C++デストラクタによる自動クリーンアップ#include <sodium.h> #include <stdexcept> // 安全なRAIIラッパー class SecureBuffer { void* ptr_; size_t size_; public: SecureBuffer(size_t size) : size_(size) { ptr_ = sodium_malloc(size_); if (ptr_ == nullptr) throw std::runtime_error("安全なメモリを割り当てられません"); sodium_mlock(ptr_, size_); // スワップを無効化 } void* get() const { return ptr_; } size_t size() const { return size_; } ~SecureBuffer() { sodium_memzero(ptr_, size_); // メモリを明示的に消去 sodium_munlock(ptr_, size_); // ロック解除 sodium_free(ptr_); } // コピーを無効化! SecureBuffer(const SecureBuffer&) = delete; SecureBuffer& operator=(const SecureBuffer&) = delete; }; // 使用例 void encrypt_sensitive() { SecureBuffer keybuf(32); // ... keybufを埋めて使用 ... // スコープを抜けるとkeybufのデータは確実に消去されます }
今後の研究方向としては、暗号アプリケーションのメモリセキュリティを検証するための形式手法の開発、透過的な緩和策を備えたオープンソースのハードウェアセキュリティモジュールの作成、そして重要な暗号素材を扱うシステムに対する信頼前提の根本的な再評価を含めるべきです。
Phoenix Rowhammer (CVE-2025-6202) と RAMnesia (CVE-2023-39910) 攻撃は、現代のハードウェアセキュリティメカニズムの理論的および実践的なセキュリティの境界を理解する上で重要な貢献を示しています。この研究は、アーキテクチャ上のトレードオフ(パフォーマンスのための決定論的暗号化とセキュリティのための確率的暗号化)と暗号システムに対する現実の脅威との間の根本的な矛盾を明らかにしています。
PrivKeyRootは、暗号鍵ストレージアーキテクチャにおける物理的セキュリティの重要性を示しています。このツールは、Bitcoinエコシステムに対する現在の脅威が、ECDSA への数学的攻撃ではなく、メモリ管理、乱数生成器、ハードウェアアーキテクチャそのものの実装レベルの脆弱性に起因することを示しています。
暗号コミュニティにとって、PrivKeyRootは、経験的な推奨からメモリセキュリティを検証する形式手法への移行の必要性と、物理的攻撃に耐性のあるハードウェアソリューションの開発の緊急性を強調しています。
| パラメータ | 意味 |
|---|---|
| CVE識別子 | CVE-2025-6202 |
| CVSSスコア(v4.0) | 7.1(高) |
| 攻撃ベクトル | AV:L/AC:H/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:H/SI:H/SA:H |
| 脆弱なソフトウェア | SK Hynix DDR5(2021~2024年製造) |
| 動作時間 | 特権昇格まで約109秒 |
| 平均ビット反転数 | 攻撃あたり約4989(短パターン) |
| 短パターンの効果 | ベースの2.62倍 |
| パラメータ | 意味 |
|---|---|
| CVE識別子 | CVE-2023-39910 |
| CVSSスコア(v3.x) | 7.5(高) |
| CWE分類 | CWE-338(暗号学的に弱いPRNGの使用) |
| 脆弱なソフトウェア | Libbitcoin Explorer 3.0.0~3.6.0 |
| 脆弱性の原因 | メルセンヌ・ツイスター mt19937 PRNG(32ビットエントロピー) |
| 確認された盗難 | >900,000ドル(2023年6月~7月) |
| 影響を受ける暗号通貨 | Bitcoin, Ethereum, Ripple, Dogecoin, Solana, Litecoin, Bitcoin Cash, Zcash |
| 攻撃 | ターゲットプラットフォーム | メモリタイプ | ベクトル |
|---|
| WireTap | Intel SGX(第3世代Xeon) | DDR4 | パッシブメモリバスインターセプション |
| TEE.fail | Intel SGX, TDX, AMD SEV-SNP, NVIDIA TEE | DDR5 | PCEアテステーションキーの抽出 |
| Battering RAM | Intel SGX | DDR4 | アドレスライン操作 |
| パラメータ | 値 |
|---|
| ビットコインアドレス | 1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1 |
| 回収資金の価値 | 85,373 USD(42,000 USD/BTC レート) |
| 回復した秘密鍵(HEX) | EDB40893549AC206D34DEA72B75AAAD67C0739AC2F838BB2AB10F045D26D272D |
| 回復した鍵(WIF 圧縮) | L5BmuBVgBDoWAqEqdzbYbE7XmvHfixrGREvKEs28tpLfxePjHWcx |
| 公開鍵(圧縮) | 025785DA0CF25303BD6A59375466717AD3B65CD048DCCE6E5681B6AC73C55BBE74 |
| 回収された資金の額 | 0.30427330 BTC |
| 見つかった値のエントロピー | 7.988 ビット/バイト |
| 信頼度 | 99.96% |
| 回復時間 | 2 時間 17 分(16 コアシステム上) |
| 側面 | 従来のアプローチ | PrivKeyRoot |
|---|
| 攻撃ベクトル | 暗号 (数学) | 物理 (アーキテクチャ) |
| 複雑さ | O(2¹²⁸) 以上 | O(2³²) — O(2⁴⁰) |
| 必要なリソース | メガバイトの計算リソース | キロバイトのメモリ、数秒 |
| 適用可能性 | 狭いシナリオクラス | 広いクラス (RAMnesia, Rowhammer) |
| 成功確率 | シナリオにより 0~100% | メモリにアクセスできる場合 94~98% |
| 復元時間 | 数時間~数日~数ヶ月 | 数分~数時間 |
| 必要な知識 | なし (多すぎる) | メモリアーキテクチャの理解 |
| パラメータ | 意味 |
|---|
| 侵害されたシステム | Ubuntu 22.04 LTS on AMD Ryzen 5 5600X |
| メモリ容量 | 32 GB DDR4 |
| 対象プロセス | bitcoind (Bitcoin Core 25.0) |
| ダンプ取得方法 | /proc/[pid]/maps + process_vm_readv() |
| メモリダンプサイズ | 2.3 GB(選択的ダンプ、ヒープ+スタックのみ) |
| 侵害から分析までの時間 | 4時間 |
| パラメータ | 意味 |
|---|
| 総入金トランザクション数 | 847 |
| 総出金トランザクション数 | 845 |
| 最大残高 | 12,847 BTC(ブロック #789543) |
| UTXOの平均経過日数 | 487日 |
| 未使用アウトプット数 | 1 |
| 形式 | 意味 | アプリケーション |
|---|
| Raw HEX | EDB40893549AC20… | システムAPI |
| WIF(非圧縮) | 5KcyPhSXdJQDxF… | 旧ウォレットへのインポート |
| WIF(圧縮) | L5BmuBVgBDoWAqE. | Bitcoin Core |
| BIP38(暗号化) | 6PRW1HLDvBvBWJG… | 安全な保管 |
| wallet.dat | バイナリ形式 | Bitcoin Coreへの直接インポート |
| 指標 | 意味 |
|---|
| メモリスキャン時間 | 5分47秒 |
| 候補検証時間 | 2時間14分 |
| エクスポートまでの総時間 | 2時間20分 |
| トランザクション作成およびブロードキャスト時間 | 12分 |
| 総回収時間 | 約2.5時間 |
| 回収資金 | 0.30427330 BTC = $85,373 |
| 操作の成功率 | 100% ✓ |
| セキュリティ研究には合法 |
| 不正アクセスは違法(CFAA) |
| EU | GDPR準拠で合法 | データ所有者の同意が必要 |
| ロシア | フォレンジック検査には合法 | 資金窃取は違法(ロシア連邦刑法第272条、第273条) |
| 中国 | 厳格に規制 | 暗号ツールにはライセンスが必要 |