Develop with pleasure!

福岡でCloudとかBlockchainとか。

Bitcoin

testnetで発見されたNeutrinoのTaproot関連の問題と軽量クライアントの課題

少し前に報告されたtestnetで発生したNeutrinoのフィルタ処理の問題について↓ https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-November/019589.html Neutrinoの位置付け LNノード実装の1つであるLNDのブロックチェーンのバックエンドの連携…

GraftrootとG'rootを組み合わせたEntroot

Pieter WuilleとAnthony Townsの議論から、GraftrootとG'rootを組み合わせたEntrootというプロトコルが公開されてる↓ https://gist.github.com/sipa/ca1502f8465d0d5032d9dd2465f32603 Graftrootとは? Graftrootは、Gregory MaxwellがTaprootを発表した後に…

Generalized taproot(G'root)

Generalized taproot(G'root)は、2018年にAnthony Townsによって提案されたPedersen Commitmentを使ってTaprootを実現するプロトコルの提案。 Taprootのscript-pathは、アンロック条件をマークルツリーにエンコードするMAST(Merklized Alternative Script…

c-lightningをRaspberry PiにセットアップしてUmbrelのBitcoin Coreと連携してみる

Diamond Handsに参加するのにUmbrel on Raspberry Pi 4を使ってフルノードのBitcoin CoreとLightningノードのLNDを家庭内LAN環境で稼働し始めたんだけど、1台Raspberry Pi 3が余っていたので、それを使って追加でc-lightningのノードを立ててみた。 Umbrelの…

Inherited IDを使ったトランザクションの参照と新しいチャネルプロトコル2Stage

先月、Bitcoin-DevメーリングリストにJeremyによって代理投稿された、匿名の開発者(John Law)による投稿では↓ https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019470.html 現在提案されれているBIP-118(anyprevout)に代わり、In…

Dust limitを悪用したLightningプロトコルの脆弱性の開示

LNの実装に影響を与える仕様レベルの脆弱性が公開されていたので内容を見てみよう↓ [Lightning-dev] Full Disclosure: CVE-2021-41591/ CVE-2021-41592 / CVE-2021-41593 "Dust HTLC Exposure Considered Harmful" 前提 まず、脆弱性の内容を理解するために…

LNDで実装されている経路探索アルゴリズム

LNを利用したオフチェーン支払いをする際、基本的に送信者が受信者までの支払いの経路を決めるようになっている。つまり、送信者はこの経路を探索する必要がある。LNのゴシップネットワークで、LNノードやそのチャネルの情報が(更新を含めて)配信されるの…

TaprootとTLUV opcodeを利用したCovenantsの新しい実現方式

最近、Anthony TownsによってCovenantsの新しい実装方式を提案されている↓ https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019419.html https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019420.html こ…

Output Script Descriptorの基本仕様を定義したBIP-380

Output Script Descriptorは、Bitcoin Core v0.17からサポートされ始めた言語で、ウォレットやその他のプログラムが、自身が所有(関連)するUTXOを追跡するのに必要な情報を含むデータを定義する。 Bitcoinのウォレットの多くはHDウォレットをサポートして…

楕円曲線のスカラー倍算アルゴリズム Part 2

前回の投稿では、楕円曲線のスカラー倍算のアルゴリズムとしてバイナリ法やWindow法のアルゴリズムについて、また射影座標を用いた高速化手法について解説した↓ techmedia-think.hatenablog.com 今回は、もともとスカラー倍算の高速化について調査するきっか…

異なる楕円曲線間の離散対数の等価性の証明

MoneroからBitcoinとMoneroでAtomic Swapが利用可能になったというアナウンスが出ていて↓ https://www.getmonero.org/2021/08/20/atomic-swaps.html そのプロトコルの一部で使用されているのが、異なる楕円曲線間の離散対数の等価性の証明。開発をしているの…

LN Offer

LN Offerは、ノードがLNを介してインボイスを要求、受信できるようにするプロトコルの拡張機能の1つで、BOLTにもBOLT 12として提案されている↓ https://github.com/rustyrussell/lightning-rfc/blob/guilt/offers/12-offer-encoding.md http://bolt12.org/ …

LNのゴシッププロトコルを使った流動性の提供

最近、C-Lightningで実験的にLNのチャネルの流動性(インバウンドキャパシティの提供)をLNのゴシッププロトコルを使って配信する機能がマージされた↓ https://github.com/ElementsProject/lightning/pull/4639 LNの支払いを受ける場合、チャネルにインバウ…

Bitcoin Scriptを使ったランポート署名の検証と量子耐性

最近Bitcoin-Devメーリングリストに、OP_CATを使ってBitcoinに量子耐性をもたせる方法について投稿されてたのが興味深かったので見てみる↓ [bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values] アイディアは…

Schnorr署名とOP_CATを使ったCovenants

Covenantsは、Bitcoinのコインの用途(送り先など)を制限するための仕組み。これまでCovenantsを導入する仕組みの提案がいくつかあったけど、2021年1月にAndrew PoelstraがSchnorr署名とOP_CATを利用したCovenantsの構成を発表しているので、その内容につい…

中継者の協力なしにチャネルの更新を可能にするVirtual Channel

これまで、Multi-Hop LocksやAtomic Multi-Channel Update、Anonymous Atomic Locksなど、多くのペイメントチャネル系の提案をしてきたPedro Moreno-Sanchezが新しいペーパー Donner: UTXO-Based Virtual Channels Across Multiple Hops を発表してたので、…

P2TRの鍵導出仕様を定義したBIP-86

Taprootのアクティベートに向けて、単一の鍵でPay to Taproot(P2TR)にコインをロックする際の、鍵の導出仕様がBIP-86として定義された↓ https://github.com/bitcoin/bips/blob/master/bip-0086.mediawiki 単一の鍵なので、対象はTaprootのKey-Path使うケー…

Taprootのビルド、署名作成のサポートをするBuilderを実装してみた

Taprootもロックインされたので、Taproot宛に送金するP2TR(Pay to Taproot)の作成や、そのUTXOを使用する際の署名作成のサポートをするBuilderクラスをbitcoinrbに実装してみた*1。 ※ 2021/11/15追記:以下のBitcoin::Taproot::SimpleBuilder については一…

秘密鍵をオフラインにしたままLN支払いを受け入れ可能にするFast Forwardプロトコル

Lightning Networkでオフチェーン支払いをする場合、(オンチェーンの支払いと違って)チャネル参加者は常にオンラインである必要がある。その際、支払いによる状態の更新で新しいコミットメントトランザクションに署名するため、秘密鍵も同様にオンラインで…

BIP32鍵導出パスのパステンプレートを定義したBIP-88

Bitcoinの秘密鍵やアドレスは決定性ウォレットによって導出されるのが主流だが、シードからどんなアドレスを導出するか(どんなBIP32導出パスを使うか)は、スクリプトタイプによっていくつかのBIPが定義されており、そのどれが使われているか、もしくは独自…

マルチシグウォレット用の新しいBIP-32階層仕様を提案するBIP-87

Bitcoinのウォレットの多くは、1つのマスターシードから各秘密鍵やアドレスの導出を行う階層的決定性ウォレットをサポートしている。この仕組みを使うことで、シードさえ覚えていれば、ウォレットを復元することができる。さらに、ウォレットが複数のアカウ…

Bitcoin Secure Multisig Setup (BSMS)

先日、マルチシグを安全にセットアップするための提案Bitcoin Secure Multisig Setup (BSMS)が、新しくBIP-129として定義された、↓ https://github.com/bitcoin/bips/blob/master/bip-0129.mediawiki PSBTなどで、ウォレット間で協力してトランザクションを…

SafegcdによるECDSA署名検証の高速化

2019年に発表された拡張ユークリッド互除法の新しいアルゴリズムを使った、ECDSA署名の生成/検証の高速化について↓ medium.com libsecp256k1にもマージされたので、どういった内容か見てみる。 ユークリッド互除法 まず基本的なユークリッド互除法について。…

Speedy Trialを使ったTaprootのデプロイ始まる

Taprootのアクティベーション方法について長らく議論されていたけど、Speedy Trialという方式が採用され、BIP-9ベースにSpeedy Trialを実装したBitcoin Core 0.21.1がリリースされた↓ https://bitcoincore.org/en/releases/0.21.1/ デプロイ方法を巡る議論 …

署名データを利用したコミットメントスキームSign to contract

ブロックチェーンでよく使われる技術要素の1つとしてコミットメントスキームが挙げられる。シンプルなコミットメントスキームのユースケースとしては、OpenTimestampなど。BitcoinであればOP_RETURN opcodeを使ってファイルのハッシュを記録することで、そ…

PSBT Version 2を定義したBIP-370

PSBTは、マルチパーティでBitcoinのトランザクションを構築したり、トランザクションの署名にハードウェアウォレットと連携したりする際に、共通のデータフォーマットを定義した仕様で、2017年に定義され、これまでいくつか修正が加えられてきた↓ techmedia-…

ピアにトランザクションをリレーしないことを通知するdisabletxメッセージを定義したBIP-338

Bitcoin Coreはネットワークに接続すると8つアウトバウンドピアを選択するが、エクリプス攻撃などに対する堅牢性を高めるため、Bitcoin Core 0.19.0.1以降これにブロックリレーのみを行う2つのアウトバウンド接続(ブロックオンリーリレー)が追加されている…

Bech32の問題を修正した改良版Bech32m(BIP-350)

Segwit導入にあたって新しいアドレス(bc1から始まるアドレス)のエンコーディング方式として導入されたのがBIP-173として定義されたBech32 techmedia-think.hatenablog.com Bech32にはタイプミスなどのアドレスの間違いが検出できるチェックサムが含まれて…

Guixを使った決定性ビルド

先日、Bitcoin CoreをGitian Buildを使ってビルドする記事を書いた↓ techmedia-think.hatenablog.com けど、最近以下のPRがBitcoin Coreにマージされた結果、Linux / Windows / macOSのバイナリのビルドがGNU Guixでできるようになった。 github.com Gitian…

ブロックチェーンに埋め込まれているBitcoinのホワイトペーパーをデコードしてみる

CWSによる著作権の訴えで最近話題になってるBitcoinのホワイトペーパーについて、Bitcoin Optechのニュースレターで取り上げられてたStackExchangeの記事↓ bitcoin.stackexchange.com が面白かったので、Bitcoinのブロックチェーンに埋め込まれているBitcoin…