Develop with pleasure!

福岡でCloudとかBlockchainとか。

DLCでオラクルが公開した署名からシークレットを生成するコードを書いてみた

去年発表されたDiscreet Log Contractsについて↓ https://adiabat.github.io/dlc.pdf techmedia-think.hatenablog.com オラクルが作成するのがSchnorr署名だったので、最初読んだとき現状のBitcoinでは実装できないと勘違いしてたんだけど、オラクルが公開す…

新しいSIGHASHフラグ「SIGHASH_NOINPUT」を定義したBIP-118

現在BitcoinにはSIGHASH_ALL、SIGHASH_SINGLE、SIGHASH_NONEの3つにSIGHASH_ANYONECANPAYを組み合わせた系6バターンのSIGHASHの組み合わせがあるが↓ techmedia-think.hatenablog.com これにSIGHASH_NOINPUTという新しいSIGHASHフラグを追加しようというBIP-…

LNのオフチェーンコントラクトの更新をシンプルにするプロトコル「eltoo」

Lightning Networkのコア機能は、二者間のオフチェーンでの決済時に新しい残高について合意し、(古い状態のコミットメントトランザクションをブロードキャストすると資金を失うというペナルティを与えることで)古い状態がオンチェーン上に展開できないよう…

Schnorrの代わりにECDSAを使って実現するTaproot

techmedia-think.hatenablog.com のECDSAの署名スキームを利用すると、 techmedia-think.hatenablog.com コインのアンロック条件が、2-of-2のマルチシグ or その他の条件で構成されるTaprootをSchnorrを使わずにECDSAで実現できるのでは?と思い、プロトコル…

ECDSA版Adaptor Signatureを書いてみた

ECDSA版 Scriptless ScriptsのベースになっているECDSAの署名スキーム techmedia-think.hatenablog.com と、それを利用したマルチシグの実装方法 techmedia-think.hatenablog.com について理解したので、続いてECDSAをベースにしたAdaptor Signatureの作り方…

Bitcoinスクリプトを使わないマルチシグを書いてみた

先日書いたECDSA版Scriptless Scriptsのベースとなっている署名スキームについて↓ techmedia-think.hatenablog.com 実際に2-of-2のマルチシグをScriptless Scriptsで実現するためのRubyのコードを書いてみた(仕組みについては↑の記事参照)。 事前準備とし…

効率的な二者間のECDSAプロトコル

以前、Andrew PoelstraがBitcoinスクリプトを書くことなくスマートコントラクトを実現するScriptless Scriptsについて紹介されていたが、これはいずれもSchnorr署名を必要とする仕組みだった。現在のBitcoinのプロトコルでサポートしているのはECDSAのみであ…

Adaptor Signatureの計算をRubyで書いてみた

Andrew Poelstraが発表したScriptless Scriptsとその応用であるAdaptor Signatureについて実際に計算部分をRubyで計算してみた。 前提となるSchnorr署名 Andrew PoelstraのScriptless ScriptsはSchnorr署名が前提となるので、まずその公式について。 秘密鍵…

LNの強化:コントラクト違反時の防衛強化とSigned Sequence Commitment

Lightning Networkのセキュリティ強化およびクライアントをよりスケーラブルにするための強化案について@roasbeef ‏がBPASE 2018で発表した内容↓(スライド 、トランスクリプト)について見てみる。 www.youtube.com トピックとしては コントラクトの違反が…

Compact Blockとは異なる方法でブロックアナウンス時のトランザクションの重複を解消するプロトコル「Graphene」

昨年スタンフォードで開催されたScaling Bitcoin 2017のBrian N. Levineのセッションで発表されてたのが効率的なブロック伝播のためのプロトコルGraphene↓ www.youtube.com 時間が空いたけど、どういうプロトコルなのかホワイトペーパーを読んでみた↓(珍し…

安全な0-confirmation決済のためのプレコンセンサス「Ansible」

Satoshi's vision conferenceでテラバイトブロックについて発表していたJoannes Vermorelが最近発表したペーパー↓ http://media.lokad.com/bitcoin/ansible-2018-05-05.pdf BCHを決済手段として利用する場合に(BTCもしかり)ネックになるのが決済のスピード…

BIP-70のPayment Protocolの検証環境を作ってみた

Bitcoinを決済に利用する際に、決済先との間の中間者攻撃やマルウェアなどに感染した環境で、本当の支払先でないアドレスに送金するといったことが起きないよう、送金先をPKIを使って検証する仕組みがBIP-70で定義されているPayment Protocol↓ techmedia-thi…

マルチパーティ間のスクリプトのプライバシーを向上させるTaprootというコンセプト

先日、bitcoin-dev MLにGregory MaxwellがポストしていたTaprootというコンセプトが興味深かったので見てみる↓ [bitcoin-dev] Taproot: Privacy preserving switchable scripting まだBitcoinにはデプロイされていないが、MASTというscriptPubkeyをマークル…

Schnorrベースのマルチシグネチャスキーム「MuSig」

先日、Gregory MaxwellとAndrew Poelstra、Yannick SeurinとPieter Wuilleらによって、Schnorr署名を使ったマルチシグスキームのホワイトペーパーが発表された↓ https://eprint.iacr.org/2018/068.pdf これに関する記事をPeiter WuilleがBlockstreamのブログ…

軽量クライアント向けのCompact Block Filterを定義したBIP-158

techmedia-think.hatenablog.com で使用するフィルタの仕様を定義したのがBIP-158↓ https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki おおまかな仕組みとしては、 BIP-37では軽量クライアント側が自身に関連する公開鍵ハッシュやOutPointな…

クライアントサイドでブロックのフィルタリングを行う軽量クライアント向けのプロトコル BIP-157

現在のSPVノードの実装は接続先のフルノードとのコネクションにBloom Filterをセットして自身に関連するトランザクションをフィルタリングするBIP-37↓の仕様をベースにしている。 techmedia-think.hatenablog.com このプロトコルでは、フィルタがフルノード…

どうしてECDSA署名から公開鍵が復元できるのか?

ECDSAの署名からどうして公開鍵が取得できるの?という聞かれて何でだろうねって話になったので調べてみた。 署名から公開鍵のセットを復元 Rubyではecdsaのgemを使えば以下のように署名と署名対象のメッセージから公開鍵を取得できる。(署名対象のメッセー…

取引所の支払い能力を証明する(Proof of Solvency)Provisionsプロトコル

Mt.Goxの破綻後に発表された取引所の支払い能力を証明するプロトコルProvisionsのホワイトペーパー↓ http://www.jbonneau.com/doc/DBBCB15-CCS-provisions.pdf 仮想通貨を取り扱う取引所では、一般的な銀行の仕組みである部分準備金銀行のようなアプローチは…

Proofs of Proof of Work

Scaling Bitcoin 2017のFlyClientの内容を追っていったら前提としてNiPoPoWs(Noninteractive-Proofs-of-Proof-of-Work)→ PoPoWs(Proofs of Proof of Work)と関連研究が続くので、まず最初にProofs of Proof of Workのプロトコルについて調べてみる。 Pro…

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

HDウォレットでSegwitのアドレスを導出する仕様について、今まではP2SHでネストしたP2WPKHの導出スキームを定義したBIP-49のみだったが↓ techmedia-think.hatenablog.com 今回ネイティブのP2WKHのアドレスをHDウォレットで導出するスキームがBIP-84としてTre…

ElementsでConfidential Transactionを作ってみる

techmedia-think.hatenablog.com Elementsのセットアップとコインの移動ができたので↑、続いてElements上でConfidential Transactionを作ってみる。 Confidential Transactionについては↓ techmedia-think.hatenablog.com 以下のサイトを参考にConfidential …

サイドチェーンにBitcoinをペグしてみる。

Confidential TransactionをサポートしているElementsで実際にCTを作ってみようと思い、まずElementsのセットアップしてサイドチェーンにコインをペグする。 github.com Elementsのセットアップ 今回使用したElementsはelements-0.14.1ブランチのソース。(…

TREZOR導入してみた

TREZOR本体に付属のUSBケーブル使ってPCに接続する。 繋いだらブラウザ開いて、trezor.io/start にアクセス。 ページ下部で、TRZORのセキュリティニュースなどを配信してるみたいなので、メールアドレスを登録。 続いてTREZORウォレットのセットアップ。「In…

任意のデータに対する署名検証を行うOP_DATASIGVERIFY(BUIP-78)

OP_GROUPに加えてBitcoin Cashの中期開発計画に含まれているのが、Bitcoinのトランザクションの署名検証の際に使われるECDSAと同じアルゴリズムを使って、任意のデータの署名を検証するOP_DATASIGVERIFYという新しいopcode。 https://github.com/BitcoinUnli…

Bitcoin Cash上でネイティブにカラードコインをサポートするOP_GROUP

Bitcoin CashのブロックチェーンでBCH以外にネイティブにカラードコインをサポートするためにOP_GROUPという新しいopcodeが提案されている↓ https://github.com/BitcoinUnlimited/BUIP/blob/master/077.mediawiki OP_GROUPとは? OP_GROUPはBitcoinのスクリ…

ペイメントチャネル間の資金移動を可能にするChannel Factory

トラストレスな双方向のオフチェーン決済を可能にするペイメントチャネルだが実用に向けてはまだ課題も多い。 techmedia-think.hatenablog.com 課題の1つにペイメントチャネルのキャパシティ(=チャネル内で決済できる金額の上限)が固定されている点がある…

MASTで選択されたスクリプトを実行するtail-callの仕組みを定義したBIP-117

MASTの機能を実現するのに新しくBIP-98とBIP-116とBIP-117の3種類のBIPが提案されている。 BIP-116はスクリプトの条件分岐をフラットにしてMASTのマークツリーを構成した結果、スクリプトで実際に使用する条件(サブスクリプト)がそのマークルツリー内に含…

MASTを実現するMERKLEBRANCHVERIFYを定義したBIP-116

MAST(マークル化抽象構文木)を実現する新しいアプローチとしてMERKLEBRANCHVERIFY opcodeの導入を提案するBIP-116が公開された↓ https://github.com/bitcoin/bips/blob/master/bip-0116.mediawiki MAST(Merkelized Abstract Syntax Tree)とは? Bitcoin…

Merkle Treeの重複エントリー問題の解消とパフォーマンスを向上するFast Merkle Treeについて定義したBIP-98

Bitcoinのブロックヘッダにはブロックに入っているトランザクションのリストにコミットするため、各トランザクションのTXIDをリーフノードにしたマークルツリーを構築し、そのマークルルートの値が入れられるようになっている。ブロックにどれだけたくさんの…

SIGHASH_FORKIDとfork idを使ったリプレイプロテクションの仕組み

8/1にBitcoin Cashが分岐した際、BTCとの間のリプレイアタックに対する保護の仕組みを組み込む必要があり、この時SIGHASHを利用する仕組みが導入された。 spec/replay-protected-sighash.md at master · Bitcoin-UAHF/spec · GitHub 最近分岐したBitcoin Gol…