Develop with pleasure!

福岡でCloudとかBlockchainとか。

lndが公開した2つの脆弱性CVE-2020-26895とCVE-2020-26896

先日lndに脆弱性が含まれているということで修正版のアナウンスがされていたけど、その内容が公開された↓ CVE-2020-26895: LND Low-S Tx-Relay Standardness https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-October/002858.html CVE-2020-…

Dual_EC_DRBGのバックドアの仕組み

japan.zdnet.com こんなニュースもあり、バックドアと言えばエドワード・スノーデンの告発でも話題になったNSA(米国家安全保障局)のバックドアを思い出した。当時は仕組みについて調べてなかったけど、どんな仕組みのバックドアだったのか今になって気にな…

DoS攻撃を可能にする脆弱性CVE-2018-17145とBitcoin Coreの脆弱性の内容と対応

最近公開された、2018年のBitcoin Coreに存在していた脆弱性に関するペーパー↓ https://invdos.net/paper/CVE-2018-17145.pdf この脆弱性はもともとJavaScriptで実装されたBitcoinのノード実装の1つであるBcoinで発見されたもので、攻撃方法は同じでも、Bco…

決定性nonceを利用したMuSigの脆弱性に対処したMuSig-DN

Blockstreamは以前、Schnorr署名を利用したマルチシグを構成する際にKey-Rogue攻撃への耐性を持たせる署名スキームMuSigを発表していた。Key-Rogue攻撃やMuSigの内容について以前解説した↓を参照。 goblockchain.network techmedia-think.hatenablog.com そ…

EthashのPoWとLight Clientの検証コスト

最近、Geth v1.9.0で導入されたUltra Light ClientがブロックヘッダーのPoWの検証をスキップしているのを知った。Bitcoinとかだと軽量ノードはブロックヘッダーのみダウンロードし有効なPoWのチェックはしてるから何故そういうアプローチなのか、EthereumのP…

Lightning Networkの新しいチャネルコントラクトの提案「Generalized Channels」

少し前に発表されたLightning Networkの改善提案のペーパー「Generalized Bitcoin-Compatible Channels」↓ https://eprint.iacr.org/2020/476.pdf 簡単に言うと↓の特性を持つ、現在のLightning NetworkのPoon-DryjaスタイルのPayment Channelの改良 共通のコ…

GrinのPoWアルゴリズムCuckoo cycleとその実装の脆弱性CVE-2020-15899

最近公開されたGrinの脆弱性CVE-2020-15899↓について見てみる。 https://github.com/mimblewimble/grin-security/blob/master/CVEs/CVE-2020-15899.md Cuckoo cycle GrinはDual Proof of Workという仕組みを採用している。これは1つはASICフレンドリーなPoW…

Grinにおけるリプレイアタックとその対策

リプレイアタックというと、チェーンがハードフォークした際に、片方のチェーンで発生した送金Txが、もう一方のチェーンで意図せずブロードキャストされる=リプレイされる問題として2017年のフォークコイン誕生の際によく話題に挙がった。 ハードフォークと…

EthereumのDNSを利用したブートストラップノードの探索

EthereumでもEIP-1469によりノード探索プロトコルでDNSがサポートされたので、内容見てみる↓ arachnid.github.io ↓で解説したように、ノードを起動するとハードコードされたブートストラップノードを使って、アウトバウンドピアの接続対象を検索する。 techm…

Ethereumのノード探索の仕組みとエクリプス攻撃とその対策

EthereumのP2Pネットワークまわりの仕様について、まずノード探索の仕組みについて理解する。 Ethereumのノード探索の仕組み Ethereumは分散ハッシュテーブル(DHT)の一種であるKademliaをベースにしたノード検出プロトコルを実装している(Kademlia自体は…

マイナーへの賄賂を利用したHTLCへの攻撃に対処するMAD-HTLC

ハッシュのプリイメージの提供とコインの入手をアトミックに行うHTLCの仕組みは、LNなどのマルチホップ支払いをサポートするPayment Channel NetworkやAtomic Swapなどいろんなアプリケーションで使われている。このHTLCの安全性に関する問題提起とその問題…

Bitcoinの次のソフトフォークのデプロイ方法は?

Bitcoinへのソフトフォークは紆余曲折あった2017年8月のSegwitの導入以降、3年経とうとしているが新たに行われていない。次のソフトフォーク候補として有力なのがSchnorr署名およびTaprootの導入だが、BIP化はされたもののまだBitcoin Coreに実装はマージさ…

WTXIDを使ったP2Pリレーの仕様を定義したBIP-339

Bitcoinでトランザクションをリレーする際は、接続中のピアに対してinvメッセージでトランザクションを通知し、相手のピアがそのトランザクションを持っていない場合、getdataメッセージでそのトランザクションデータを要求する。この際のトランザクションの…

BIP-32のキーチェーンから決定論的にエントロピーを導出する仕様BIP-85

Bitcoinの鍵を管理するウォレットでは、BIP-32のHDウォレットの仕様↓をサポートし、マスターシードから取引に使用する個別の鍵を導出するようになっているのがほとんど。 techmedia-think.hatenablog.com さらにBIP-39の仕様を利用してマスターシードを12個…

Segwit Bugとは何なのか?

Segwit Bugというタイトルでニュースが出ており decrypt.co Trezorでも脆弱性対応のパッチが公開されていた↓ https://blog.trezor.io/details-of-firmware-updates-for-trezor-one-version-1-9-1-and-trezor-model-t-version-2-3-1-1eba8f60f2dd ので、どん…

Bitcoin Core 0.20.0でASマップを使ったピア選択を有効にする

BitcoinのP2Pネットワークに参加するノードは、起動時に他のピアを探し接続することでネットワークに参加する。現在Bitcoin Coreでは8つのアウトバウンドピア(ブロックリレー専用のものがさらに2つある)に接続するようになっているが、ピアを選択する際に…

CVE-2017-12842とトランザクションサイズ

こないだのBitcoin Optechのニュースレターで取り上げられていたトランザクションサイズに関するトピックについて↓、本筋とは直接関係ないけど2017年に発見された脆弱性CVE-2017-12842について触れられていたので、どういった脆弱性だったのか見てみる。 bit…

Succinct Atomic Swap

Statechainなどを発表したRuben Somsenがシンプルな新しいAtomic Swapプロトコルを公開したので見てみる↓ https://gist.github.com/RubenSomsen/8853a66a64825716f51b409be528355f プロトコル自体はECDSAおよびSchnorrとAdaptor Signatureを利用したScriptle…

LNの新しいチャネルタイプAnchor Output

LNでは送金の度に残高を更新したコミットメントトランザクションを新しく作り署名する。チャネルを閉じる際には、 両者が協力してClosingトランザクションを作成し閉じるパターン (相手と通信できないなどで)片方の参加者が最新のコミットメントトランザク…

LNの中継者の資金を奪う攻撃手法

Bitcoin Optech Newsletterで取り上げられていた、LNのマルチホップ決済で中間者の資金を奪う攻撃方法について↓ bitcoinops.org もともとはLigning-DevやBitcoin-Dev MLでMatto Coralloによって議論されていた内容。 HTLCの構成 LNにおいてアリス→ボブ→マロ…

LNの経路情報を秘匿するRoute Blinding

送信者が受信者の完全な経路を知らなくても支払いやメッセージのルーティングを可能にするRoute Blindingの仕様のドラフトが提案されてるので見てみる↓ https://github.com/lightningnetwork/lightning-rfc/blob/route-blinding/proposals/route-blinding.md…

2P-ECDSAを必要とせずHTLCを代替する半Scriptlessプロトコル

LNのマルチホップ決済で使われるHTLCの仕組みを代替する仕組みとしてPoint Time Locked Contracts (PTLCs)が提案されている。 既存のHTLCを使ったマルチホップ決済は、支払い経路で同じハッシュのプリイメージが使われるため、プライバシーの懸念や中間者の…

秘密分散ベースのMPCプロトコルSPDZ

最近のECDSAの閾値署名のペーパー読んでたら、まずSPDZ(スピーズ)について理解しておく必要がありそうだったので、秘密分散ベースのMPCプロトコルであるSPDZの仕組みについてまとめてみる。 秘密分散とは? ある要素aを持っていた場合、それをa = a1 + a2…

Bitcoin Scriptの分岐処理の実装とオーバーヘッド

最近Bitcoin Coreにマージされた↓の改善について github.com Bitcoin Core PR Review Clubで取り上げられていたので↓、内容について見ておく。 bitcoincore.reviews Bitcoin Scriptの分岐処理 Bitcoinはスタック型のスクリプト言語を使ってコントラクトを実…

Bulletproofのrange proofに任意のデータを埋め込む方法と復元する(rewind)方法

先日、Grinがウォレットリストアの際に自身のUTXOを識別するのにBulletproofsのrange proofにヒントを隠している記事を書いたけど、↓ techmedia-think.hatenablog.com 今回の記事では、リストアという限定的な利用方法だけでなく任意のデータをrange proofに…

Bulletproofsを利用したGrinのウォレットのリストア

BitcoinのウォレットであればほぼBIP-32のHDウォレットをサポートしているため、マスターシードさえバックアップしておけば、いつでもウォレットをリストアすることができる。Bitcoinの受け取りに使用するアドレスは全てマスターシードから導出した鍵から作…

Verifiable Delay Function

最近ブロックチェーン関連のペーパーでよく話題に上がる新しい暗号プリミティブVerifiable Delay Function(VDF)について調べてみた。 VDFに関する研究は、以下のサイトでまとめられている。 https://vdfresearch.org/ 今回はVDF Day 2019のDan Bonehのセッ…

冗長的な支払経路を用いることでLN支払のスループットを向上させるBoomerang

Lightning Networkで決済可能な金額は各チャネルのキャパシティに依存する。この制限を緩和するため、支払に複数の経路を使用するAtomic Multi-Path Payments(AMP)が提案され、各ノードに実装されつつある。AMPの仕組みについては以前書いた↓参照。 techme…

Grinで発見された脆弱性CVE-2020-6638の内容

ちょっと前にGrinで発表された脆弱性CVE-2020-6638↓の内容について見てみる。 https://github.com/mimblewimble/grin-security/blob/master/CVEs/CVE-2020-6638.md Grinの構成要素 具体的な脆弱性の解説の前に、Grinの構成要素について抑えておく↓ Pedersen …

未使用のUTXOを所有していることをUTXOを明らかにせず証明するプロトコルPoDLE

BitcoinトランザクションのプライバシーやFungibilityの向上のためCoinJoinを実装しているJoinmarketで提案されているPoDLEというプロトコルが面白かったので見てみる↓ joinmarket.me PoDLEプロトコル PoDLEが解決するのは、自分があるUTXOを所有していて、…