Bitcoin
Taprootのアクティベートに向けて、単一の鍵でPay to Taproot(P2TR)にコインをロックする際の、鍵の導出仕様がBIP-86として定義された↓ https://github.com/bitcoin/bips/blob/master/bip-0086.mediawiki 単一の鍵なので、対象はTaprootのKey-Path使うケー…
Taprootもロックインされたので、Taproot宛に送金するP2TR(Pay to Taproot)の作成や、そのUTXOを使用する際の署名作成のサポートをするBuilderクラスをbitcoinrbに実装してみた*1。 ※ 2021/11/15追記:以下のBitcoin::Taproot::SimpleBuilder については一…
Lightning Networkでオフチェーン支払いをする場合、(オンチェーンの支払いと違って)チャネル参加者は常にオンラインである必要がある。その際、支払いによる状態の更新で新しいコミットメントトランザクションに署名するため、秘密鍵も同様にオンラインで…
Bitcoinの秘密鍵やアドレスは決定性ウォレットによって導出されるのが主流だが、シードからどんなアドレスを導出するか(どんなBIP32導出パスを使うか)は、スクリプトタイプによっていくつかのBIPが定義されており、そのどれが使われているか、もしくは独自…
Bitcoinのウォレットの多くは、1つのマスターシードから各秘密鍵やアドレスの導出を行う階層的決定性ウォレットをサポートしている。この仕組みを使うことで、シードさえ覚えていれば、ウォレットを復元することができる。さらに、ウォレットが複数のアカウ…
先日、マルチシグを安全にセットアップするための提案Bitcoin Secure Multisig Setup (BSMS)が、新しくBIP-129として定義された、↓ https://github.com/bitcoin/bips/blob/master/bip-0129.mediawiki PSBTなどで、ウォレット間で協力してトランザクションを…
2019年に発表された拡張ユークリッド互除法の新しいアルゴリズムを使った、ECDSA署名の生成/検証の高速化について↓ medium.com libsecp256k1にもマージされたので、どういった内容か見てみる。 ユークリッド互除法 まず基本的なユークリッド互除法について。…
Taprootのアクティベーション方法について長らく議論されていたけど、Speedy Trialという方式が採用され、BIP-9ベースにSpeedy Trialを実装したBitcoin Core 0.21.1がリリースされた↓ https://bitcoincore.org/en/releases/0.21.1/ デプロイ方法を巡る議論 …
ブロックチェーンでよく使われる技術要素の1つとしてコミットメントスキームが挙げられる。シンプルなコミットメントスキームのユースケースとしては、OpenTimestampなど。BitcoinであればOP_RETURN opcodeを使ってファイルのハッシュを記録することで、そ…
PSBTは、マルチパーティでBitcoinのトランザクションを構築したり、トランザクションの署名にハードウェアウォレットと連携したりする際に、共通のデータフォーマットを定義した仕様で、2017年に定義され、これまでいくつか修正が加えられてきた↓ techmedia-…
Bitcoin Coreはネットワークに接続すると8つアウトバウンドピアを選択するが、エクリプス攻撃などに対する堅牢性を高めるため、Bitcoin Core 0.19.0.1以降これにブロックリレーのみを行う2つのアウトバウンド接続(ブロックオンリーリレー)が追加されている…
Segwit導入にあたって新しいアドレス(bc1から始まるアドレス)のエンコーディング方式として導入されたのがBIP-173として定義されたBech32 techmedia-think.hatenablog.com Bech32にはタイプミスなどのアドレスの間違いが検出できるチェックサムが含まれて…
先日、Bitcoin CoreをGitian Buildを使ってビルドする記事を書いた↓ techmedia-think.hatenablog.com けど、最近以下のPRがBitcoin Coreにマージされた結果、Linux / Windows / macOSのバイナリのビルドがGNU Guixでできるようになった。 github.com Gitian…
CWSによる著作権の訴えで最近話題になってるBitcoinのホワイトペーパーについて、Bitcoin Optechのニュースレターで取り上げられてたStackExchangeの記事↓ bitcoin.stackexchange.com が面白かったので、Bitcoinのブロックチェーンに埋め込まれているBitcoin…
少し前にBitcoin Core v0.21.0がリリースされたけど、このBitcoin CoreのリリースにはGitian Buildという決定性ビルドプロセスが使われている。 https://github.com/bitcoin/bitcoin/blob/master/doc/release-process.md Gitian Buildとは? 公式サイトによ…
先日リリースされたBitcoin Core 0.21.0で軽量クライアント向けて新しいフィルターの提供がサポートされるようになった。有効になったBIP-157の仕様については↓ techmedia-think.hatenablog.com BIP-157のサポートはBitcoin Core起動時に-blockfilterindex=1…
昨年9月にパテントロックが外れたことで、Bitcoin Coreでもスカラー倍算アルゴリズムの高速化オプションが有効化された↓ github.com もともと、パテントの存在を知らずHal Finneyによって2013年にlibsecp256k1には実装されてたものの無効化されていたものが…
先日lndに脆弱性が含まれているということで修正版のアナウンスがされていたけど、その内容が公開された↓ CVE-2020-26895: LND Low-S Tx-Relay Standardness https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-October/002858.html CVE-2020-…
最近公開された、2018年のBitcoin Coreに存在していた脆弱性に関するペーパー↓ https://invdos.net/paper/CVE-2018-17145.pdf この脆弱性はもともとJavaScriptで実装されたBitcoinのノード実装の1つであるBcoinで発見されたもので、攻撃方法は同じでも、Bco…
Blockstreamは以前、Schnorr署名を利用したマルチシグを構成する際にKey-Rogue攻撃への耐性を持たせる署名スキームMuSigを発表していた。Key-Rogue攻撃やMuSigの内容について以前解説した↓を参照。 goblockchain.network techmedia-think.hatenablog.com そ…
少し前に発表されたLightning Networkの改善提案のペーパー「Generalized Bitcoin-Compatible Channels」↓ https://eprint.iacr.org/2020/476.pdf 簡単に言うと↓の特性を持つ、現在のLightning NetworkのPoon-DryjaスタイルのPayment Channelの改良 共通のコ…
ハッシュのプリイメージの提供とコインの入手をアトミックに行うHTLCの仕組みは、LNなどのマルチホップ支払いをサポートするPayment Channel NetworkやAtomic Swapなどいろんなアプリケーションで使われている。このHTLCの安全性に関する問題提起とその問題…
Bitcoinへのソフトフォークは紆余曲折あった2017年8月のSegwitの導入以降、3年経とうとしているが新たに行われていない。次のソフトフォーク候補として有力なのがSchnorr署名およびTaprootの導入だが、BIP化はされたもののまだBitcoin Coreに実装はマージさ…
Bitcoinでトランザクションをリレーする際は、接続中のピアに対してinvメッセージでトランザクションを通知し、相手のピアがそのトランザクションを持っていない場合、getdataメッセージでそのトランザクションデータを要求する。この際のトランザクションの…
Bitcoinの鍵を管理するウォレットでは、BIP-32のHDウォレットの仕様↓をサポートし、マスターシードから取引に使用する個別の鍵を導出するようになっているのがほとんど。 techmedia-think.hatenablog.com さらにBIP-39の仕様を利用してマスターシードを12個…
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のP2Pネットワークに参加するノードは、起動時に他のピアを探し接続することでネットワークに参加する。現在Bitcoin Coreでは8つのアウトバウンドピア(ブロックリレー専用のものがさらに2つある)に接続するようになっているが、ピアを選択する際に…
こないだのBitcoin Optechのニュースレターで取り上げられていたトランザクションサイズに関するトピックについて↓、本筋とは直接関係ないけど2017年に発見された脆弱性CVE-2017-12842について触れられていたので、どういった脆弱性だったのか見てみる。 bit…
Statechainなどを発表したRuben Somsenがシンプルな新しいAtomic Swapプロトコルを公開したので見てみる↓ https://gist.github.com/RubenSomsen/8853a66a64825716f51b409be528355f プロトコル自体はECDSAおよびSchnorrとAdaptor Signatureを利用したScriptle…
LNでは送金の度に残高を更新したコミットメントトランザクションを新しく作り署名する。チャネルを閉じる際には、 両者が協力してClosingトランザクションを作成し閉じるパターン (相手と通信できないなどで)片方の参加者が最新のコミットメントトランザク…