Home市場Coinkite、Coldcardの脆弱性で修正版ファームウェアを公開 AI悪用の可能性を指摘

Coinkite、Coldcardの脆弱性で修正版ファームウェアを公開 AI悪用の可能性を指摘

ハードウェアウォレット大手のCoinkiteが、Coldcardの鍵生成に見つかった重大な脆弱性を受け、修正版ファームウェアを公開した。ただし更新だけでは既存のシードは安全にならず、資金の移行が必要になる。

7月30日午後にSNS上で議論され始めたハッキングで、これまでに1,000BTCを超えるビットコインが盗まれたとみられている。ハードウェアウォレットメーカーとして最も高い評価を得てきた企業の一つであるCoinkiteが、ビットコイン用ハードウェアウォレットの秘密鍵を安全に生成する処理に重大な脆弱性を抱えていたことが明らかになった。業界の専門家は、今回の侵害にAIが使われたとみている。

影響が最も大きいのは、ファームウェアのバージョン4.0.1(2021年3月)から4.1.9までを搭載したColdcard MK3だ。デバイスで生成された12語または24語のシードのうち、ユーザーによるサイコロの出目やBIP39の追加パスフレーズを含んでいないものが脆弱性の対象となる。

影響を受けるユーザーは、自身がリスクにさらされていると考え、できるだけ早くウォレットからコインを移すべきだ。なかでも影響が最も大きいのが、上記の条件に該当するMK3ユーザーだ。ビットコイン・マガジンのテクニカルライターであるShinobiがこの件についてのガイドを公開しており、Coinkiteもガイドとアドバイザリーを公開している。

脆弱性は、ハードウェアを制御する基盤となるソフトウェアであるファームウェアの、特定の1行のコードにあった。Coinkiteのアドバイザリーは7月31日午前に更新され、MK3・MK4・MK5の各機種、およびColdcard Qを含むデバイスのファームウェアを更新するよう呼びかけている。

「2026年7月31日午前9時33分(米国東部夏時間)更新:修正版ファームウェアが利用可能になった。Mk4およびMk5のユーザーはバージョン5.6.0以降へ更新する必要がある。Qのユーザーは1.5.0Q以降へ。Mk3については。4.2.0以降へ更新すること。」

※編集部注:Coinkiteのアドバイザリーは、米国東部夏時間の8月1日午後2時35分(日本時間8月2日午前3時35分)に再更新された。影響対象は、MK2・MK3の4.0.1〜4.1.9、MK4・MK5のStandard版5.6.0未満/Edge版6.6.0X未満、QのStandard版1.5.0Q未満/Edge版6.6.0QX未満。独立したサイコロによる十分なエントロピーを追加していた場合などを除き、対象ファームウェアで生成されたシードはリスクにさらされる。ファームウェアを更新しても既存シードは修復されないため、Coinkiteは修正版への更新後に新しいシードを生成し、資金を移行するよう案内している。

Coinkiteはアドバイザリーの中で、ファームウェアを更新しても、それ以前の脆弱なファームウェアで生成された秘密鍵・公開鍵が安全になるわけではないとも説明している。これらの鍵は事実上、脆弱なパスワードで作られたのと同じ状態にあり、脆弱なままだという。ファームウェアの更新後は、新しいウォレットを作成し、資金をオンチェーンで新しいアドレスへ送って安全を確保する必要がある。Coinkiteはこう書いている。

「ファームウェアを更新しても、既存のシードが変わったり修復されたりすることはない。お使いのモデル向けの修正版ファームウェアより前にシードを生成している場合は、独立したサイコロエントロピーの例外に該当しない限り、以下の移行手順に従うこと」

一部のマルチシグウォレットにもリスク

Bitcoin Coreコントリビューターでサイバーセキュリティエンジニアのピーター・トッド氏は同日、複数のColdcardをしきい値方式で組み合わせて資金を保護しているマルチシグウォレットについて、個別のケースに言及した。「例えば2-of-3で、うち2台がColdcard、3台目は侵害されていないデバイスというケースだ。資金を動かすと、それまでアドレスのハッシュに隠れていたスクリプトが初めて明らかになる。その瞬間、攻撃者は侵害された2つのColdcardの鍵を使って資金を盗むのに十分な情報を手にすることになる」

マルチシグのスクリプトを明らかにするトランザクションは未承認の状態にあることがあり、その間にハッカーがより高い手数料を付けた対抗トランザクションを作る余地が生まれる。もっとも、こうしたケースには解決策がある。マイニングプールのMARAが提供するプライベートメンプールのマイニングサービス「Slipstream」が助けになるという。「彼らはトランザクション、ひいては公開鍵を、ブロックに入るまで秘密にすると約束しているからだ。攻撃者が資金を盗む余地は大幅に小さくなる」とトッド氏は述べた。さらに「すでにアドレスを再利用しているなら、これは当てはまらない。とにかく一刻も早く資金を移すべきだ。だが再利用していないのであれば、MARAが助けになるかもしれない」と付け加えた。

目先の危機を越えて

Coinkiteの共同創業者兼CEOであるNVK氏は、資金を守るための基本的な手順を越えた初期分析を、X上の長文投稿で公開した。その中で同氏は、被害を受けたユーザーが「被害届の提出、保険金の請求、あるいは自身での調査」を進めることを望む場合、同社として「協力する用意がある」とし、「その損失に固有の書面によるインシデント要約と、共有できる限りのトランザクションデータ」を提供するとしている。

目先の危機を越えて、NVK氏は、AIのハッキング能力がこれまでのサイバーセキュリティの力学と前提を変え始めているという、より広い技術的な変化を指摘した。ブログ投稿で同氏はこう書いている。

「他のすべての開発者へ。我々はこれが新しいAIパラダイムの厳然たる現実だと考えている。AIを使ったコードレビューは、業界で最も経験豊富な専門家すら上回る速度で、潜んでいたバグを見つけ出せるようになった。あなたのファームウェアがオープンソースであるか、過去に一度でも公開されたことがあるなら、すでに攻撃者と防御者の双方に読まれていると想定すべきだ」

今回のハッキングと、過去24時間で推定7,000万ドルを超える盗難資金は、いまやあらゆるウォレットのコードベースを脆弱性がないか精査しているであろうハッカーたちに支払われた、事実上の報奨金にあたる。ビットコインおよび広く暗号資産の業界は、ハッカーが自分たちのコードを試すという前提のもとで動いてきたが、サイバーセキュリティに最適化されたAIモデルの発達は、そのプロセスを加速させる。

業界の専門家は前夜、X Spacesの長時間にわたる公開音声配信に集まり、この話題を何時間も議論した。当面の推奨事項やビットコインユーザーからの質問への回答に加え、今後数週間に何が続きそうかという分析も交わされた。他のウォレット提供者も調査・攻撃の対象になるとみられ、とりわけ秘密鍵の素材を生成するオープンソースのプロジェクトが試されることになる。

このX Spacesは録音されなかった。参加者全員のプライバシーを守るためとみられる。ただ、初期の受け止めとしては、企業は生き残りの問題として、最新のフロンティアモデルで自社コードを監査する必要が出てくるという見方が示されている。Anthropic、OpenAI、MoonshotのKimi K3など、サイバーセキュリティ向けの最新AIモデルはすでに一般に利用可能だ。ビットコイン業界の多くの企業はすでにこれらをコードの健全性の検証に使っているが、使っていない企業もあるとみられ、ウォレットに関わるコードの脆弱性を探す競争は、とりわけこの先数週間、確実に続く。結局のところ、今日は失われたコインを悼み、内省と入念な見直しの時間が訪れる。いまや歴史的となったこのハッキングの先にあるのは、非常に厳しい教訓を経て、桁違いに堅牢になったオープンソースのセルフカストディ産業とインフラだろう。AIエージェントを手にしたハッカーは、いまや誰もが防御を試しているとみられるからだ。

マルチベンダー・マルチキーのウォレットとコベナンツ

今後の自己主権性の高いウォレットは、個人向けであれ法人向けであれ、単一のベンダーに依存しない形になるとみられる。マルチシグウォレットは、うまく設計されていれば、脆弱性のリスクを異なるコードベース・チーム・ハードウェアへ分散できる。

先述のX Spacesでは、ユーザー自身が生成するエントロピーも大きなテーマとなり、サイコロによるエントロピー生成が解決策として繰り返し挙がった。Coldcardをはじめ、Foundation Devicesなど他のハードウェアウォレットも、自前のエントロピーを正しく追加する方法をユーザーに案内している。振るべき出目の数は多く、理想的には100回を超える。ただ、一度実施すれば、サイコロはウォレットにとってソフトウェアに依存しないランダム性の供給源となり、ソフトウェアやハードウェアで生成されるエントロピーに潜むエッジケースのリスクからユーザーを切り離すことにもなる。

ビットコイン業界の一部で支持されているソフトフォークであるコベナンツも、セルフカストディ産業をさらに強化する一手として取り沙汰され始めている。ビットコインのコンセンサスに対するこのアップグレードは、実現するとしても激しい議論を伴うとみられるが、ホワイトリストに登録したアドレスにしか送金できないウォレットなど、現在のビットコインスクリプトでは不可能なスマートコントラクト機能をユーザーにもたらす可能性がある。

Author

RELATED ARTICLES
.bitcoin-widget { background-color: #1a1a2e; color: white; padding: 20px; border-radius: 10px; max-width: 325px; width: 100%; font-family: Arial, sans-serif; box-sizing: border-box; margin: 0 auto; } .bitcoin-header { display: flex; align-items: center; margin-bottom: 15px; flex-wrap: wrap; } .bitcoin-icon { width: 24px; height: 24px; margin-right: 10px; } .price { font-size: 24px; margin: 0; margin-bottom: 10px; } .stats-container { display: flex; flex-wrap: wrap; justify-content: space-around; gap: 10px; margin-top: 10px; } .stat-column { text-align: center; flex: 1 1 30%; } .stat-label { font-size: 12px; color: #999; margin-bottom: 5px; } .stat-value { font-size: 14px; } .positive { color: #00ff00; } .negative { color: #ff0000; } .error-message { color: #ff0000; font-size: 12px; display: none; margin-top: 10px; } .view-charts-button { display: block; width: 100%; max-width: 250px; margin: 20px auto 0; padding: 10px; background-color: #ff9500; color: white; text-align: center; text-decoration: none; border-radius: 5px; font-size: 14px; font-weight: bold; } .view-charts-button:hover { background-color: #e68600; text-decoration: none; color: white; }
Bitcoin Bitcoin BTC/JPY
¥0
24hr %:
0.0%
24hr High:
¥0
24hr Low:
¥0
Error loading data. Check console for details.
VIEW 150+ BITCOIN CHARTS
async function updateBitcoinPrice() { try { const response = await fetch('https://api.coingecko.com/api/v3/coins/bitcoin?localization=false&tickers=false&market_data=true'); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); // Update price in JPY const price = data.market_data.current_price.jpy; const change = data.market_data.price_change_percentage_24h; // Percentage is currency-agnostic const high = data.market_data.high_24h.jpy; const low = data.market_data.low_24h.jpy; // Update price display with Yen symbol document.getElementById('bitcoin-price').textContent = `¥${price.toLocaleString('ja-JP', { minimumFractionDigits: 0, maximumFractionDigits: 0 })}`; // Update price change with color const changeElement = document.getElementById('price-change'); changeElement.textContent = `${change.toFixed(1)}%`; changeElement.className = 'stat-value ' + (change >= 0 ? 'positive' : 'negative'); // Update high and low prices with Yen symbol document.getElementById('high-price').textContent = `¥${high.toLocaleString('ja-JP', { minimumFractionDigits: 0, maximumFractionDigits: 0 })}`; document.getElementById('low-price').textContent = `¥${low.toLocaleString('ja-JP', { minimumFractionDigits: 0, maximumFractionDigits: 0 })}`; hideError(); } catch (error) { console.error('Error fetching Bitcoin price:', error); showError('Failed to fetch Bitcoin price'); } } function showError(message) { const errorElement = document.getElementById('error-message'); errorElement.textContent = message; errorElement.style.display = 'block'; } function hideError() { const errorElement = document.getElementById('error-message'); errorElement.style.display = 'none'; } // Initialize and start updates document.addEventListener('DOMContentLoaded', () => { try { updateBitcoinPrice(); setInterval(updateBitcoinPrice, 60000); } catch (error) { console.error('Initialization error:', error); showError('Initialization failed'); } });

LATEST NEWS

custom ad 1