Develop with pleasure!

福岡でCloudとかBlockchainとか。

2017年に起きたMoneroのキーイメージを細工したコイン無限生成の脆弱性の内容

2017年2月に発覚したMonero(正確にはCryptoNoteのプロトコルを採用している暗号通貨)でコインを無限生成できる脆弱性について、原因が曲線の特性に起因するもので興味深かったので調べてみた。 ww.getmonero.org この脆弱性自体は実際にMoneroでは悪用され…

The GHOSTDAG Protocol at Scaling Bitcoin 2018

Scaling Bitcoin 2018 復習シリーズ。今回はヘブライ大学のYonatan Sompolinskyによる「The GHOSTDAG Protocol」の発表↓(30分あたりから) youtu.be 書き起こしは↓ ghostdag ホワイトペーパーは↓ https://eprint.iacr.org/2018/104.pdf Bitcoinのオンチェー…

Bitcoin CoreはなぜECDSA署名にLOW Rを適用するようになったのか?

Bitcoinでは、送金時にトランザクションにセットする署名に、現在ECDSA署名を採用している。 秘密鍵をx、対応する公開鍵をP = xGとした場合、メッセージにmに対するECDSA署名は以下のように作成する。 署名の作成 ランダムな値kを選択する。 点R = kGを計算…

Statechains: Off-chain Transfer of UTXOs at Scaling Bitcoin 2018

Scaling Bitcoin 2018復習シリーズ。今回はRuben Somsenによる「Statechains: Off-chain Transfer of UTXOs」の発表について見てみる。 youtu.be 書き起こしは↓ http://diyhpl.us/wiki/transcripts/scalingbitcoin/tokyo-2018/statechains/ ホワイトペーパー…

送信者−受信者間で簡単なコインジョインを行うBustapayプロトコルを定義したBIP-79

Bitcoinのトランザクションはインプットに送信者のUTXOが、アウトプットに受信者のアドレスと送信者のお釣りがセットされる構成が一般的。ブロックチェーンの分析をする企業でよく採られるアプローチでは、こういうトランザクションの場合、インプットのUTXO…

2P-ECDSA: Fungible 2-of-2 MultiSigs for Today's Bitcoin at Scaling Bitcoin 2018

Scaling Bitcoin 2018 復習シリーズ。今回はLightning LabsのConner Fromknechtによる「2P-ECDSA: Fungible 2-of-2 MultiSigs for Today's Bitcoin」の発表↓ youtu.be 書き起こしは↓ scriptless-ecdsa 前半はLindellベースの2者間のECDSA署名プロトコル↓の解…

The State of Atomic Swaps at Scaling Bitcoin 2018

Scaling Bitcoin 2018復習シリーズ。今回は10/7のThomas Eizinger(COMITプロトコル開発してる人みたい)が発表した「The State of Atomic Swaps」の内容について見てみる↓ www.youtube.com 書き起こしは↓ http://diyhpl.us/wiki/transcripts/scalingbitcoin…

Output Descriptorとscantxoutsetを使ってUTXOセットをスキャンする

Bitcoin Core 0.17.0からUTXOセットをスキャンするscantxoutsetというRPCが追加された。 Bitcoin Core :: scantxoutset (0.17.0 RPC) 今まではウォレット内に鍵を持つUTXOの情報はlistunspentなどで取ってこれてたけど、↑はウォレット機能とは別で、UTXOセッ…

lndで実装されているBIP-39に代わるシード管理方式「aezeed」

lndでBIP-39*1の欠点を修正するために実装されたシードの新しい管理方式「aezeed」について↓読んでみた。 https://github.com/lightningnetwork/lnd/tree/master/aezeed 2018年3月のSF Bitcoin Devsで@roasbeefがlnd v0.4-betaの紹介した際にも触れられてる…

Stratum protocol extensionsについて定義したBIP-310

Stratumはプールマイニングをサポートするマイニングプロトコルだが、その拡張の利用については長らく正式な規格を記述するBIPが無かったが、それをBIPとして定義したのがBIP-310↓ github.com 基本的には、Stratumサーバーとマイニングソフトウェアが接続さ…

ブロックヘッダのバージョンについてソフトフォークのデプロイ以外の汎用利用を提案するBIP-320

Bitcoinのブロックヘッダにはバージョンを表すnVersionフィールドが存在する。現在このnVersionフィールドは、コンセンサスに影響するような新しい機能をソフトフォークで導入する際に、ソフトフォークの準備ができたことを各マイナーがシグナリングするのに…

SchnorrベースのScriptlessな「Multi-Hop Locks」の実現方法

techmedia-think.hatenablog.com techmedia-think.hatenablog.com と書いたので、残ったSchnorrベースのMulti-Hop Locksについても書いておく。 (Multi-Hop Locksのコンセプトについては最初の記事参照) SchnorrベースのMulti-Hop Locksは署名アルゴリズム…

ECDSAベースのScriptlessな「Multi-Hop Locks」の実現方法

Scaling Bitcoin 2018のセッションの1つでもある、LNなどで利用されているペイメントチャネルネットワークの新しいプリミティブである「Multi-Hop Locks」について、以前一方向準同型関数を使った実装方法について書いたが↓ techmedia-think.hatenablog.com…

Schnorr署名と検証可能な秘密分散法を利用したm-of-nのマルチシグスキーム

SchnorrのBIPドラフト↓ https://github.com/sipa/bips/blob/bip-schnorr/bip-schnorr.mediawiki に応用例の1つとして記載されているのが、Scnorr署名とペダーセンの検証可能な秘密分散法を利用してm-of-nのマルチシグを構成するというもので、参照論文↓ htt…

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のみであ…