Develop with pleasure!

福岡でCloudとかBlockchainとか。

Bitcoinのトランザクション伝播時の匿名性を強化するDandelionについて定義したBIP-156

Bitcoin Coreなどのノードがトランザクションをリレーする際、ノードは接続中のピアに対して一斉にトランザクションを送信する訳ではなく、接続中の各ピア毎に指数関数的な遅延時間をもって各ピアにトランザクションを送信するようになっている。これにより…

Bitcoinのプライバシーを向上する決済プロトコル Pay to EndPoint(P2EP)

Blockstreamが先日公開した、Bitcoinのfungibilityの問題を改善するため、Pay to EndPoint(P2EP)という決済プロトコルを発表してたので見てみる↓ blockstream.com Bitcoinのプライバシーの課題 Bitcoinの課題の1つとして挙げられるのがfungibility。 現金…

安全性とプライバシーを強化するペイメントチャネルネットワーク「Multi-Hop Locks」

LNではHTLCを使って仲介者を経由したマルチホップ決済を可能にしている。例えばアリス→キャロルのオフチェーン決済をボブとマイクを経由して行うケースでは以下のような決済フローになる。 最初に受信者のキャロルがランダムな値Rとそのハッシュ値H(R)を生成…

Bitcoinベースの新しいデジタルアセットプロトコル「RGB」

Lightining Networkとの連携も含めた、「RGB」というBitcoinベースの新しいデジタルアセットプロトコルが発表された↓ github.com RGBのプロトコル仕様は、現状以下の5つのモジュールに分かれている。 RGB プロトコルのコアおよび低レベルのアセットロジック…

ペイメントチャネルへの資金のチャージ/引き出しを行うSplicing

Lightning Networkはオフチェーン決済を行う2者が資金を両者のマルチシグにデポジットするトランザクション(Funding Tx)をオンチェーンにブロードキャストし、そのデポジットした額(キャパシティ)の範囲内でオフチェーン決済を行う。キャパシティを超え…

ECDSAベースのScriptless Lightning Network

少し時間が空いたけど、Scriptless Scripts with ECDSAのホワイトペーパーについて techmedia-think.hatenablog.com techmedia-think.hatenablog.com と見てきたので、最後のLightning Networkへの適用について見てみる。 Lightning Networkのベースとなるの…

Schnorrの非対話型ゼロ知識証明(NIZKP)について定義しているrfc8235を読んでみた

Schnorrにおいて、ある離散対数の知識を知っていることをゼロ知識で証明するプロトコル(Schnorr NIZK proof)が2017年にrfc2835rfc8235として登録されていたので読んでみた。 RFC 8235 - Schnorr Non-interactive Zero-Knowledge Proof 簡単に概要を説明す…

再利用可能なペイメントコードを使った二者間の決済アドレスの導出方法を定義したBIP-47

BIP-47の記事無いですよね?と突っ込まれたので書いてみた。 (結構前に書かれたBIPでメジャーでないものとか導入されなかったコンセンサスのBIPについては書けてない。今BIPとして登録されてるのが115個くらいで、ブログに投稿したのは、そのうち50個くらい…

秘密鍵が対応するBitcoinアドレスの種類を指定する拡張WIFフォーマットを定義したBIP-178

Bitcoinアドレスは秘密鍵から計算した公開鍵を使って生成されるが、そのアドレスの種類は複数(P2PKH、P2WPKH、P2SHでネストしたP2WPKH)ある。いずれも同じ秘密鍵から生成可能なアドレスだが、実際にウォレットで使ってるアドレスはそのうちのどれか1つ。た…

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 …