Develop with pleasure!

福岡でCloudとかBlockchainとか。

部分的に署名されたトランザクション(PSBT)のフォーマットを定義するBIP-174

通常のP2PKHやP2WPKHで決済をする分には特に関係ないが、P2SHベースのマルチシグやコントラクトなどで複数のユーザーによる署名が必要な場合、ユーザー間でトランザクションをやりとりしながら、各自署名を付与し、最終的にブロードキャスト可能なトランザク…

未使用なUTXOかチェックするメッセージを定義したBIP-64

フルノードのUTXOセット内にある出力が存在するかチェックするためのP2Pメッセージを定義したBIP-64についてみてみる↓ https://github.com/bitcoin/bips/blob/master/bip-0064.mediawiki ※ マイクハーンによる提案で、Bitcoin Coreにはservice bitの定義は存…

支払いの証明(Proof of Payment)について定義したBIP-120

Bitcoin決済をしたことを証明する支払いの証明(Proof of Payment)方法について定義しているのがBIP-120↓ https://github.com/bitcoin/bips/blob/master/bip-0120.mediawiki Bitcoinによる支払いが行われたことを条件にサービスなどを提供するケースって結…

P2SHでネストしたP2WPKHベースのアカウント導出スキームを定義したBIP-49

HDウォレットのマルチアカウント機能がBIP-44で定義されているけど↓ techmedia-think.hatenablog.com segwitがアクティベートされたこともあり、これにP2SHでネストされたP2WPKHをサポートしようということでBIP-49が新たに追加されたので見てみる↓ https://…

HDウォレットのマルチアカウント階層を定義したBIP-44

以前BIP-32の階層的決定性ウォレットについて書いたけど↓ techmedia-think.hatenablog.com このHDウォレットの階層を論理的に定義したBIP-44についてみてみる↓ https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki 動機 このBIPで提案している…

ECDSA署名のエンコーディング関連のmalleabilityを解消するルールを追加するBIP-146

Segwitのトランザクションで署名が入力から分離されたことで、署名スクリプトに細工してtxidを変更することはできなくなったけど、witnessに移動した署名データの改変自体は可能。依然として可能なECDSA署名のエンコーディング関連の改変を解消するためにト…

ElementsのAsset tagの生成と追加発行の仕組み

ElementsでConfidential Assetsについて、以前ブログを書いた↓ techmedia-think.hatenablog.com けど、Asset Tagや実際にアセットを追加発行する際のトークンなどがどういうロジックで生成されて、何を持って追加発行が承認されるのか仕組みについてよく分か…

Bitcoin Coreのテストコードの実行方法

既存のコードの追加・改修の際に、動作を保証するテストコードがあり、自動テストできる環境があるのは重要で、Bitcoin Coreにももちろんテストコードと自動テストの仕組みがある。 Bitcoin Coreには単体テストと、リグレッション及びインテグレーションテス…

プルーニングピア向けのservice bitを定義したBIP-159

Bitcoinのmainnetのブロックチェーンのデータサイズは現在150GB弱ほどだが、プルーニングモードで動作させると使用済みのTXOを指定サイズ分だけ保持し、古いTXOデータは削除されていくようになり、とても少ないディスクスペースでフルノードを動作させること…

Bitcoinの高速リレーネットワークFIBRE

ブロックサイズを拡張について、データ量が多くなるためデータを転送する際により高いネットワーク帯域が求められるようになり、ハッシュパワーの集中が促進するのではないかという懸念がある。 より高速なリレーネットワークを活用することで、この問題を解…

HFリサーチ”BIP-MSMMHHF”

Welcome - Bitcoin Hard Fork Research ↑の2つめの、James Hilliardが書いたマルチステージマージマイニングヘッダハードフォーク↓について見てみる。 https://github.com/jameshilliard/bips/blob/bip-msmmhhf/bip-msmmhhf.mediawiki 簡単に言うと、ハード…

HFリサーチ”BIP-MMHF”

ブロックサイズの拡張(1M→2M)を目的としたハードフォークに注目が集まっているけど、ブロックサイズとは別に↓のような問題を解消するためにブロックヘッダの構造についてもそろそろ変更が必要じゃないかと思う。 extra nonceの確保 現在のハッシュレートで…

ソフトフォークを確実にアクティベートするBIP-8

現在、ソフトフォークのアクティベートと方法はBIP-9のversion bitsを使った方法が採用されている↓ techmedia-think.hatenablog.com この方法を使ってOP_CSVのソフトフォークがリリースされ(シグナリング開始から約2ヶ月でアクティベート)、Segwitのデプ…

未来の価格に基づいた決済を可能にするDiscreet Log Contracts

Lightning Networkのホワイトペーパーを書いたThaddeus DryjaがこないだDiscreet Log Contracts(直訳すると離散対数コントラクト?)というホワイトペーパーを公開していたので↓見てみる。 https://adiabat.github.io/dlc.pdf アブストラクト スマートコン…

Compact Blockバージョン2

BIP-152として定義されているCompact Blockについて以前ブログを書いた↓ techmedia-think.hatenablog.com 簡単にいうと新しいブロックデータを受信する際、既存のblockメッセージを使ってデータを受け取ると、そのメッセージにはブロック内の全トランザクシ…

Bitcoinのソフトフォークとして導入するConfidentail Transaction

昨年Bitcoinの開発メーリングリストにポストされたConfidential TransactionをBitcoinのソフトフォークとして導入する話↓ [bitcoin-dev] Confidential Transactions as a soft fork (using segwit) Confidential TransactionについてはBlockstreamが開発した…

Confidential Transactionのrange proofの仕組み

techmedia-think.hatenablog.com ↑でConfidential Transactionのコミットメントの作成と検証をしたので、続いてrange proofについて見てみる。 Confidential Transactionではトランザクションの各出力にコインの量ではなくコミットメント(楕円曲線上の点)…

Confidential Transactionのcommitmentを生成してみる

以前、Confidential Transactionのホワイトペーパーを読んだ↓ techmedia-think.hatenablog.com Confidential Transactionでは、トランザクションの出力にコインの量をセットする代わりに、Pedersen commitmentを楕円曲線に適用したコミットメント(この場合…

ECDSAの脆弱性を利用した未承認トランザクションの二重使用を防止する仕組み

Bitcoinのトランザクションは10分に一度作成されるブロックに取り込まれる。最近のメモリプールの状況では10分後に取り込まれればラッキーな方で、まだ時間がかかることもよくあると思う。 その一方でECサイトや実店舗でのBitcoin決済の導入は進んでいる。リ…

Strong Federationsの概要

Blockstreamが今年に入って公開したStrong Federationsのホワイトペーパーに記載されている技術仕様についてを読んでみた↓ https://arxiv.org/pdf/1612.05491v2.pdf もともとBlockstreamのサイドチェーンのホワイトペーパーのFederated Pegでは、信頼できる…

リプレイ攻撃を防ぐOP_CHECKBLOCKATHEIGHTを定義したBIP-115

EthereumがETHとETCにハードフォークした際に問題となったリプレイ攻撃。 ブロックチェーンでハードフォークが発生すると、ハードフォークの前に持っていた通貨は、分岐した両方のチェーンで有効な状態になる。仮にAコインがハードフォークしてAコイン(元の…

Segwitのアドレスフォーマットを定義したBIP-173

取り下げられたSegwitのアドレスフォーマットを定義したBIP-142↓ techmedia-think.hatenablog.com に変わって、新しい仕様でSegwitのアドレスフォーマットを定義したBIP-173が登録されてたので見てみる↓ bips/bip-0173.mediawiki at master · bitcoin/bips ·…

Standards Track BIPのレイヤーの分類を定義したBIP-123

Standards Track BIPのヘッダの項目の1つにLayerがあるが、このLayerについて定義したのがBIP-123↓ bips/bip-0123.mediawiki at master · bitcoin/bips · GitHub 動機 Bitcoinはさまざまな標準を含むシステムで、そのいくつかは相互運用性を担保するのに必…

メッセージが拒否された理由を明確にするBIP-061

2014年4月にリリースされたBitcoin Core 0.9.0、ネットワークのプロトコルバージョン70002でサポートされたrejectメッセージのBIP↓ bips/bip-0061.mediawiki at master · bitcoin/bips · GitHub リモートピアとメッセージを交換する際、意図する動作になら…

リモートピアのメモリプール内のトランザクション情報を取得できるようにしたBIP-035

2012年の8月に提案されたmempoolメッセージのBIP↓ bips/bip-0035.mediawiki at master · bitcoin/bips · GitHub mempoolメッセージを受け取ったノードはメモリプール内の全トランザクションハッシュを返すようになり、getdataメッセージで取得可能なトランザ…

リモートピアの生存確認とレイテンシーの計測を可能にするBIP-031

2012年5月にリリースされたBitcoin Core 0.6.1から導入されたPeer Serviceレイヤーの拡張で、リモートピアの生存確認と、レイテンシーの測定を可能にするBIP-031↓ bips/bip-0031.mediawiki at master · bitcoin/bips · GitHub 簡単に言うとよくあるping送っ…

ProtocolのバージョンとUser Agentを分離したBIP-014

作られたのは2011年とだいぶ前のBIPだけど、あまりPeer ServiceレイヤーのBIPを見てなかったので見てみる。 昔はプロトコルのバージョンとクライアントのバージョンが同じだったのね。 bips/bip-0014.mediawiki at master · bitcoin/bips · GitHub 動機 Bitc…

Bitcoin Core 0.14.1のリリース

Bitcoin Core 0.14.1のマイナーアップデートがリリースされてたので主な変更内容を見ておく。 bitcoin/release-notes-0.14.1.md at master · bitcoin/bitcoin · GitHub RPCの変更 createrawtransactionの最初の引数がtransactionsからinputsにリネームされた…

署名に厳密なDERエンコーディングを適用したBIP-066

techmedia-think.hatenablog.com でECDSAの署名データの改竄に遭遇したのもあり、関連して現在のBitcoinプロトコルに適用されている署名のエンコーディングルールについて定義したBIP-066の内容もおさえておく。 bips/bip-0066.mediawiki at master · bitcoi…

BIPとして登録されたHTLC(BIP-199)

HTLCの仕様がBIPとして登録されてたので見てみる↓ bips/bip-0199.mediawiki at master · bitcoin/bips · GitHub 概要 Hashed Time-Locked Contract (HTLC) は、あるユーザー間(売り手と買い手)の決済を行うコントラクトで、売り手がハッシュのプリイメージ…

トランザクションのmalleabilityを利用した攻撃を受けた話

最近testnetでブロードキャストしたトランザクションが、消えて無くなる現象が続いたので調べてみた。 消えたといっても実際に消えてるわけではなく、ブロードキャストした際のTXIDとは別のTXIDでブロックに格納されている。 実際にブロードキャストした際の…

Confidential Assetsの概要

Blockstreamが新しくConfidential Assetsなる機能をリリースしていたので、どういったものなのか見てみる。 blockstream.com Open Assets ProtocolやCounterpartyやColuなどBitcoinのブロックチェーン上で、Bitcoin以外のアセットを発行・送付するプロトコル…

Bitcoin Core 0.14.0のリリース

Bitcoin Core 0.14.0がリリースされたのでどんな変更があったのか見ておく↓ Bitcoin Core :: Bitcoin Core 0.14.0 Released with Performance Improvements 主な新機能は↓ IBDのパフォーマンス改善 ブロックチェーンのデータサイズは絶えず増加していて、現…

UTXOのサイズ削減のアプローチTXO Commitments

BitcoinのUTXOのデータサイズは増加する一方で、フルノードを運用する際のボトルネックにもなっているが、そのUTXOの成長の問題を解決する方法としてBitcoinのコア開発者の1人であるPerter Toddが昨年 TXO Commitmentsという仕組みについてブログに投稿して…

BIPについて定義したBIP-002

BIPについて定義していたBIP-001が、2016年11月にBIP-002にリプレースされてたので見とく↓ bips/bip-0002.mediawiki at master · bitcoin/bips · GitHub 概要 BIPはBitcoin Improvement Proposalの略で、Bitcoinコミュニティに情報提供したり、Bitcoinの新し…

Lightning Networkで古いCommitment Txを取り消すRevocation Key

以前、Lightning Networkを構築する際のPayment Channelの仕組みについて書いた↓ techmedia-think.hatenablog.com プリイメージを使ったコミットメントトランザクションの取消 このPayment Chanelを使ったオフチェーンの決済には、悪意あるユーザによって最…

P2WSHを使うトランザクションの作成と署名

P2WPKHの署名方法について書いた↓ので techmedia-think.hatenablog.com 今回はP2WSHの署名について。 単純なマルチシグでもつまならいのでOP_CSVのBIPに出てくるLNのトランザクションサンプルのP2WSHにしてみる↓ https://github.com/bitcoin/bips/blob/maste…

P2WPKHを使うトランザクションの作成と署名

だいぶ前に書き始めて放置してたのでちゃんと実装してみた。 以前↓のようにwitnessなトランザクションのパース方法について書いたので、 techmedia-think.hatenablog.com 続いてwitnessなトランザクションを作ってみる。 P2WPKHにBitcoinを送付 まず最初にP2…

bitcoin-rubyで決定性署名を生成する

bitcoin-rubyのP2PKHの署名のデフォルト実装 bitcoin-rubyを使ってP2PKHのUTXOを入力にしたトランザクションの署名は↓のように書ける。 require 'bitcoin' Bitcoin.network = :testnet prev_key = Bitcoin::Key.from_base58('秘密鍵') prev_tx = Bitcoin::Pr…

決定性辞書式順序ソートによるトランザクションの入出力のソート(BIP-69)

Lightning Networkの仕様の中でトランザクションの入出力のソートについてBIP-69が参照されていたので、どんな仕様なのか見てみる。 bips/bip-0069.mediawiki at master · bitcoin/bips · GitHub 要約 現在、トランザクションの入力と出力の順序について、Bi…

Lightning Networkを使ったクロスチェーン取引

Bitcoin MagazineのLightning Networkを使ったクロスチェーン取引の拡張についての記事が出てた↓ので見てみる。 bitcoinmagazine.com Atomic Swap そもそもBitcoinとアルトコインの相互運用というのは、別に新しいことではなく、2013 年にTier Nolanが紹介し…

HDウォレット(BIP-32)

長編のBIPで斜め読みしてたので、ちゃんと読んでみる。 bips/bip-0032.mediawiki at master · bitcoin/bips · GitHub 概要 このBIPでは階層的決定性ウォレット(HDウォレット)について説明する。 この仕様では、異なるクライアント間で交換可能な決定性ウォ…

Bitcoin Core 0.13.2のリリース

先日Bitcoin Core 0.13.2がリリースされた↓ bitcoincore.org リリースノートは↓ bitcoincore.org 主な変更点 0.13系のマイナーアップデートなので、基本的にはBugfixとパフォーマンス改善のリリースになるので、新機能のリリースは無い。 古いOSをサポート対…

Teechanの決済プロトコル

Bitcoin-NGやCovenantsなどの提案をしているコーネル大学の先生方が先日Teechanというオフチェーン決済のプロトコルに関するブログとホワイトペーパーを公開していたので見てみる↓ hackingdistributed.com https://www.cs.cornell.edu/People/egs/papers/tee…

Federated Pegのアドレス導出スキーム

Blockstreamが公開しているSidechainのホワイトペーパーのAppendixにFederated Pegを行う際のP2SHアドレスの導出スキームが定義されている。このFederated Pegの仕組みは同じくBlockstreamが公開しているサイドチェーンの実装Elements Alphaでも利用されてい…

楕円曲線を使ったゼロ知識証明

↓のゼロ知識証明の解説記事に掲載されている楕円曲線を使ったゼロ知識証明をbitcoin-rubyを使って検証してみた。 www.atmarkit.co.jp 検証手順は↑のの記事の通りで、 証明者(アリス)と検証者がいて、楕円曲線上の点Pとアリスの秘密鍵aがあるとき、その公開…

Rubyで楕円曲線の鍵共有(ECDH)と加算

Bitcoinで使われる楕円曲線の鍵について、bitcoin-rubyを使って鍵交換(ECDH)と楕円曲線の加算をしてみる。 鍵共有(ECDH) アリスとボブが持つ鍵を使って共通鍵を生成してみる。 アリスとボブはそれぞれお互いの公開鍵を知っており、秘密鍵をそれぞれa、b…

ペアリングベース暗号のライブラリをRubyから使う

ペアリングベースの暗号の基礎的な数学的演算をCで実装したlibpbcというライブラリがある。 PBC Library - Pairing-Based Cryptography - About このライブラリをJavaに移植したJPBCというライブラリもある。 JPBC - Java Pairing-Based Cryptography Librar…

Elementsで実装されているOP_CHECKSIGFROMSTACKを使ったCovenants

Scaling Bitcoinのセッションで提案されていた、Bitcoinの秘密鍵が例え盗まれても、Bitcoin自体が盗まれないようにするCovenantsを使った金庫についてブログを書いた↓けど、 techmedia-think.hatenablog.com このアプローチとは別に、Blockstreamが提供する…

Bitcoinの使われ方を制限することで盗難を防ぐCovenants

ミラノで開催されたScaling Bitcoinのセッションの1つだったCovenantsについてホワイトペーパーが公開されてたので見てみた。 http://fc16.ifca.ai/bitcoin/papers/MES16.pdf ※ ↑の論文は特にBIPにもなっている訳でもないので、今後Bitcoinのスクリプトシス…