Develop with pleasure!

福岡でCloudとかBlockchainとか。

v3トランザクションリレー

最近Bitcoin Coreにv3トランザクションリレーポリシーのPRがマージされたので↓ github.com v3トランザクションリレーについてまとめてみた。 トランザクションの手数料引き上げ方法と課題 Bitcoinでブロードキャスト済みのトランザクションの手数料を引き上…

FROSTを利用したマルチシグの設定変更

FROSTはSchnorrベースの閾値署名方式で、プロトコルの内容については過去の記事↓やGBEC動画参照。 techmedia-think.hatenablog.com このFROSTを利用してBitcoinでマルチシグウォレットの開発を進めているFrostsnapというプロジェクト↓ https://frostsnap.com…

Bitcoin Core v22.0未満に存在したブロック遅延バグの開示

Optechのニュースレターに掲載されていた、Delving Bitcoinフォーラムで開示されたBitcoin Core v22.0より前のバージョンに存在したブロック遅延攻撃を可能にする脆弱性↓ https://delvingbitcoin.org/t/block-stalling-issue-in-core-prior-to-v22-0/499 脆…

Repairable Threshold Scheme

最近、Schnorrベースの閾値署名スキームFROSTをベースにして、暗号技術だけでt-of-nのマルチシグの設定を動的に調整可能にする提案が行われている。その中で、母数nの数を増やす際に利用されているのが、RTS(Repairable Threshold Scheme)。 RTSは、シャミ…

btcdで発見された相対的タイムロックのコンセンサスバグ

先日、Delving Bitcoinで開示された、btcdで発見された相対的タイムロックのコンセンサスバグについて↓ https://delvingbitcoin.org/t/disclosure-btcd-consensus-bugs-due-to-usage-of-signed-transaction-version/455 相対的タイムロック トランザクション…

CLN v23.02〜v23.05.2に影響したDoS脆弱性

Core Lightnig v23.02〜v23.05.2に影響した脆弱性について、最近内容が開示された↓ DoS disclosure: Channel open race in CLN - Implementation - Delving Bitcoin ので、内容を確認してみる。詳細は報告者のブログ記事で説明されている↓ morehouse.github.…

BitcoinのP2P層の通信を暗号化するBIP-324

これまでBitcoinのP2Pレイヤーの通信は暗号化されておらず平文でメッセージがやりとりされている。基本的にBitcoinの場合、ブロックやトランザクションなどのデータは誰もが共有する台帳データで機密性のあるデータではないから。 ただ、リレーされるデータ…

LND v0.14.0とv0.15.0で修正された2つの脆弱性

最近、過去(2021年)のLND実装のサービス拒否の脆弱性が公開されてたので見てみる↓ Denial-of-service bugs in LND's channel update gossip handling - Implementation - Delving Bitcoin (最近は、Delving Bitcoinフォーラムでの議論も増えてるっぽい。…

現在のBitcoinのUTXOセットの内訳

現状のBitcoinのUTXOセットについて、その内訳を調べてみた。 UTXOセットのダンプ Bitcoin Coreを実行すると、chainstateディレクトリ以下のLevelDBのファイルにUTXOセットのデータが格納される。LevelDBは基本的に1つのプロセスしかDBファイルを開けないの…

IPAを利用した多項式コミットメントスキーム

Inner Product Argument(IPA)は、内積の関係を証明するプリミティブで、いくつかの証明システムに組み込まれて使用されている。IPAの解説については、GBEC動画 or 過去記事参照↓ goblockchain.network techmedia-think.hatenablog.com IPAは、多項式コミッ…

コンテンツを復号可能な鍵をアトミックに交換できるBitStream

BitVMやZeroSyncの開発者であるRobin Linusが先日公開したBitStreamのペーパー↓ https://robinlinus.com/bitstream.pdf 分散型のコンテンツホスティングネットワークに対して(最近ユーザーが増えてるNostrとか)、持続可能なインセンティブを持たせるため、…

GG18/20で発見された脆弱性CVE-2023-33241

GG18のプロトコルについて、ざっと確認したので↓ techmedia-think.hatenablog.com 秘密鍵を抽出できるという脆弱性CVE-2023-33241の内容について見ていく。ペーパーは↓ https://eprint.iacr.org/2023/1234.pdf 攻撃を成功するためには、攻撃者は署名プロセス…

閾値ECDSA署名プロトコルGG18

GG18/GG20の脆弱性CVE-2023-33241が今年の夏くらいに公開されていた模様↓ www.fireblocks.com GG18/GG20は閾値ECDSA署名をサポートするMPCプロトコルで、ブロックチェーン界隈のMPC系のウォレット実装でよく利用されているらしい。CVE-2023-33241は、この2つ…

Bitcoin上で任意の計算の検証を可能にするBitVM

ZeroSyncのRobin Linusが、先日、Bitcoinで(現状opcodeとして存在しないような計算を含む)任意のロジックのコントラクトを表現できるようにする提案BitVMを発表した↓ https://bitvm.org/bitvm.pdf BitVMの仕組み 世の中にはたくさんのプログラムが存在する…

Simple Taproot Channel(Part 3)

Simple Taproot Channelの提案について、これまで チャネルの開設フロー↓ techmedia-think.hatenablog.com 支払いの転送フロー↓ techmedia-think.hatenablog.com とみてきたので、最後はチャネルの閉鎖フローの変更点について↓ https://github.com/lightning…

Simple Taproot Channel(Part 2)

前回の記事では、Simple Taproot Channelの開設ステップを見てきたので↓ techmedia-think.hatenablog.com 今回は、支払い(HTLC)の転送の変更点についてみていく。 https://github.com/lightning/bolts/blob/e25132d8de0164224578964fcd3f7328ddfc3281/bolt…

Simple Taproot Channel(Part 1)

lnd v0.17.0のリリースで、実験的にTaproot Channelのサポートが追加される↓ https://github.com/lightningnetwork/lnd/blob/master/docs/release-notes/release-notes-0.17.0.md#protocol-features 従来のLNでは、チャネルを開く際、チャネル参加者の両名が…

ANYPREVOUTを利用したCTVのエミュレート

Rusty RussellのBitcoinにおけるCovenantsの記事を見てて、Covenants via Signaturesという手法について言及されてたので、このCovenants手法を調べてみた。APOを使ってCTV Covenantsをエミュレートするというアプローチ。 SIGHASH_ANYPREVOUT BIP-118として…

BLS12-381の点のシリアライゼーションフォーマット

ペアリングに適した楕円曲線の1つであるBLS12-381の各曲線E, E'上の点のシリアライゼーションフォーマットについて(もともとZcashで定義された仕様)↓ https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-pairing-friendly-curves-11#appendix-C BLS12…

BIP-380のKey Expressionで複数のディスクリプターを表現できるようにする追加仕様の提案(BIP-389)

最近追加されたBIP-389↓ https://github.com/bitcoin/bips/blob/master/bip-0389.mediawiki は、BIP-380に対する追加仕様。BIP-380は、ウォレットのバックアップにアウトプット・ディスクリプターを使用する際の仕様↓ techmedia-think.hatenablog.com この内…

Bitcoinで汎用的なスマートコントラクトを実現するための提案MATT

MATT(Merkleize All The Things!)は、BitcoinのようなUTXOモデルで汎用的なスマートコントラクトを構築しようという提案の1つ↓ https://merkle.fun/ Taprootを利用したステートへのコミット EVMのようなステートツリーを持たないBitcoinで唯一管理されるス…

FROSTの署名作成時の最適化

FROSTは、Schnorrベースの閾値署名方式↓ techmedia-think.hatenablog.com GBECの解説動画はこちら。 最近、Zcash Foundationから、FROSTの署名生成時のスカラー乗算処理を最適化した記事が公開されてたので見てみる↓ zfnd.org 最適化のポイント FROSTでは、…

Bitcoinの新しいmempool設計の提案

Bitcoinのmempoolについて、既存の課題とそれを改善する新しい設計案が提案されている↓(最近Optechで始まった限定シリーズも、この辺りの話があるから?) github.com 現在のmempoolの課題 mempoolには、Bitcoinネットワークでブロードキャストされた、まだ…

BitcoinでMuSig2*をサポートするためのBIP-327

MuSigは、Schnorr署名でn-of-nのマルチシグを実現するにあたって、Rogue-Key攻撃に対する堅牢性を備えた署名プロトコル。MuSigは 署名に使用するPublic nonceのコミットメントの交換 Public nonceの交換 部分署名の作成、交換 という3ラウンドの通信を必要と…

Ordinal InscriptionのDEX「OpenOrdex」でのPSBTの利用

Bitcoin上でNFTを取引可能にするOrdinalのDEX「OpenOrdex」がリリースされてたのでみてみる↓ github.com Dockerfileが提供されてるので、ビルドして実行するとローカル環境にOrdinalのDEXが起動する↓ Inscriptionの取得 Inscriptionは、Inscription numberを…

実際に紙とペンでCodex32のマスターシードの生成/検証/リカバリーをしてみる

先日書いたCodex32について↓ techmedia-think.hatenablog.com 手計算可能と書いたけど、チェックサムの生成や、シェアの正しさの検証、追加シェアの導出やシェアを使ったリカバリーが本当に手計算可能なのか?実際にやってみる。やり方は、この冊子にまとめ…

手計算でBIP-32シードを生成/検証可能な新しいシードエンコード方式Codex32

Bitcoinの主要ウォレットはBIP-32 HDウォレットをサポートしており、単一のマスターシードから、支払いや受け取りに使用するすべての鍵を導出するようになっている。オンチェーンの資金は、基本的にこのマスターシードだけ保持していれば、そこからリカバリ…

KZG commitmentをRubyで実装してみた

多項式コミットメントの1つであるKZG commitmentについて↓ techmedia-think.hatenablog.com より詳しく理解するためにRubyで実装してみた↓ https://github.com/azuchi/kzg/ セットアップ KZG commitmentはまず最初に公開パラメーターを生成する。これは基本…

ウォレットからラベルをエクスポート/インポートするフォーマットを定義したBIP-329

先日、Bitcoinのウォレットからラベルをエクスポートしたりインポートするためのフォーマットを定義したBIP-329が公開されたので見ておく↓ https://github.com/bitcoin/bips/blob/master/bip-0329.mediawiki BIP-32のHDウォレットやBIP-39のようなニーモニッ…

楕円曲線上の点を出力するハッシュ関数の標準化 Hash to Curves

楕円曲線を使用したPedersen CommitmentやBLS署名など、誰もその離散対数を知らない点を利用する暗号プロトコルを最近よく見かける。ただ、プロトコルの説明では、そのような点の導出方法があまり詳しく書かれていなかったりすることもあり、アルゴリズムの…