Ruby
SMART Health Cardは、COVID-19のワクチン接種や検査結果を検証可能な方法で提示できることを直近の目標としたヘルスカードのフレームワーク。長期的には予防接種やその他の健康情報なんかもサポートする計画らしい。これらの証明について、組織や国を超えて…
Taprootもロックインされたので、Taproot宛に送金するP2TR(Pay to Taproot)の作成や、そのUTXOを使用する際の署名作成のサポートをするBuilderクラスをbitcoinrbに実装してみた*1。 ※ 2021/11/15追記:以下のBitcoin::Taproot::SimpleBuilder については一…
先日リリースされたBitcoin Core 0.21.0で軽量クライアント向けて新しいフィルターの提供がサポートされるようになった。有効になったBIP-157の仕様については↓ techmedia-think.hatenablog.com BIP-157のサポートはBitcoin Core起動時に-blockfilterindex=1…
c-lightning 0.7から任意の言語でPluginを書けるようになった↓ blockstream.com 現在、C、Python、Golang、JavaでPluginを書くためのライブラリが提供されている。 c-lightningのPlugin Pluginを利用することでc-lightningが提供する機能を拡張することがで…
Bitcoinの軽量クライアント向けに自身に関連するトランザクションを判別する仕組みとしては、Bloom Filterを利用するBIP-37がベースだが、軽量ノード側のプライバシーの改善とフルノードの負荷を軽減するためCompact Block Filterという新しい仕組みが提案さ…
去年発表されたDiscreet Log Contractsについて↓ https://adiabat.github.io/dlc.pdf techmedia-think.hatenablog.com オラクルが作成するのがSchnorr署名だったので、最初読んだとき現状のBitcoinでは実装できないと勘違いしてたんだけど、オラクルが公開す…
techmedia-think.hatenablog.com のECDSAの署名スキームを利用すると、 techmedia-think.hatenablog.com コインのアンロック条件が、2-of-2のマルチシグ or その他の条件で構成されるTaprootをSchnorrを使わずにECDSAで実現できるのでは?と思い、プロトコル…
ECDSA版 Scriptless ScriptsのベースになっているECDSAの署名スキーム techmedia-think.hatenablog.com と、それを利用したマルチシグの実装方法 techmedia-think.hatenablog.com について理解したので、続いてECDSAをベースにしたAdaptor Signatureの作り方…
先日書いたECDSA版Scriptless Scriptsのベースとなっている署名スキームについて↓ techmedia-think.hatenablog.com 実際に2-of-2のマルチシグをScriptless Scriptsで実現するためのRubyのコードを書いてみた(仕組みについては↑の記事参照)。 事前準備とし…
Andrew Poelstraが発表したScriptless Scriptsとその応用であるAdaptor Signatureについて実際に計算部分をRubyで計算してみた。 前提となるSchnorr署名 Andrew PoelstraのScriptless ScriptsはSchnorr署名が前提となるので、まずその公式について。 秘密鍵…
ECDSAの署名からどうして公開鍵が取得できるの?という聞かれて何でだろうねって話になったので調べてみた。 署名から公開鍵のセットを復元 Rubyではecdsaのgemを使えば以下のように署名と署名対象のメッセージから公開鍵を取得できる。(署名対象のメッセー…
TREZOR本体に付属のUSBケーブル使ってPCに接続する。 繋いだらブラウザ開いて、trezor.io/start にアクセス。 ページ下部で、TRZORのセキュリティニュースなどを配信してるみたいなので、メールアドレスを登録。 続いてTREZORウォレットのセットアップ。「In…
8/1のBitcoin CashのハードフォークでBitcoinがBTCとBCHに分岐した。分岐前にBTCを保持していると、それと同額のBCHも持っていることになる。 取引所などに預けていて、取引所がBCHに対応していれば何もしなくても取引所が同額のBCHが付与してくれる。モバイ…
techmedia-think.hatenablog.com ↑でConfidential Transactionのコミットメントの作成と検証をしたので、続いてrange proofについて見てみる。 Confidential Transactionではトランザクションの各出力にコインの量ではなくコミットメント(楕円曲線上の点)…
以前、Confidential Transactionのホワイトペーパーを読んだ↓ techmedia-think.hatenablog.com Confidential Transactionでは、トランザクションの出力にコインの量をセットする代わりに、Pedersen commitmentを楕円曲線に適用したコミットメント(この場合…
P2WPKHの署名方法について書いた↓ので techmedia-think.hatenablog.com 今回はP2WSHの署名について。 単純なマルチシグでもつまならいのでOP_CSVのBIPに出てくるLNのトランザクションサンプルのP2WSHにしてみる↓ https://github.com/bitcoin/bips/blob/maste…
だいぶ前に書き始めて放置してたのでちゃんと実装してみた。 以前↓のようにwitnessなトランザクションのパース方法について書いたので、 techmedia-think.hatenablog.com 続いてwitnessなトランザクションを作ってみる。 P2WPKHにBitcoinを送付 まず最初にP2…
bitcoin-rubyのP2PKHの署名のデフォルト実装 bitcoin-rubyを使ってP2PKHのUTXOを入力にしたトランザクションの署名は↓のように書ける。 require 'bitcoin' Bitcoin.network = :testnet prev_key = Bitcoin::Key.from_base58('秘密鍵') prev_tx = Bitcoin::Pr…
Blockstreamが公開しているSidechainのホワイトペーパーのAppendixにFederated Pegを行う際のP2SHアドレスの導出スキームが定義されている。このFederated Pegの仕組みは同じくBlockstreamが公開しているサイドチェーンの実装Elements Alphaでも利用されてい…
↓のゼロ知識証明の解説記事に掲載されている楕円曲線を使ったゼロ知識証明をbitcoin-rubyを使って検証してみた。 www.atmarkit.co.jp 検証手順は↑のの記事の通りで、 証明者(アリス)と検証者がいて、楕円曲線上の点Pとアリスの秘密鍵aがあるとき、その公開…
Bitcoinで使われる楕円曲線の鍵について、bitcoin-rubyを使って鍵交換(ECDH)と楕円曲線の加算をしてみる。 鍵共有(ECDH) アリスとボブが持つ鍵を使って共通鍵を生成してみる。 アリスとボブはそれぞれお互いの公開鍵を知っており、秘密鍵をそれぞれa、b…
ペアリングベースの暗号の基礎的な数学的演算をCで実装したlibpbcというライブラリがある。 PBC Library - Pairing-Based Cryptography - About このライブラリをJavaに移植したJPBCというライブラリもある。 JPBC - Java Pairing-Based Cryptography Librar…
Ethereum使ったアプリケーションをRubyで書けないかなーと思ってRubyのライブラリを調べてみた。 EthereumのRubyライブラリ 公式ドキュメントで紹介されているのは以下の3つ。 ruby-ethereum Rubyで書かれたEVM(Ethereum Virtual Machine)の実装 github.c…
Segwitの導入にあたってブロック作成時にwitness トランザクションの署名が確かにブロックに含まれていることを保証するために新しいCommitment構造が導入されている。 techmedia-think.hatenablog.com コインベーストランザクションに追加されたCommitment…
Open Assets Protocolではアセットのメタデータを定義したAsset DefinitionをURLで指定する。 techmedia-think.hatenablog.com ↑に記載されているように、Asset Definition URLとブロックチェーン上のアセットを紐付ける方法は以下の2種類がある。 アセット…
techmedia-think.hatenablog.com 先月リリースされたBitcoin Core 0.13.0にSegwitのコードがマージされtestnetで利用可能になったので、関連するRPCの変更点を見てみる。 RPCの変更点 getblock と getblockheader の変更点 出力内容に新しく以下の項目が追加…
witnessなトランザクション用にBIP-144で新しいシリアライゼーションフォーマットが定義された↓ techmedia-think.hatenablog.com ので実際にそのフォーマットに従ってトランザクションをパースしてみた。 フォーマットの変更点 詳細はBIP-144に定義されてい…
bitcoin-rubyを使ってマルチシグの作成とマルチシグでロックされたUTXOへの署名をする。 他の言語のライブラリもそうだけど、bitcoin-rubyもBitcoin::ScriptクラスでP2SHを使ったマルチシグアドレスの作成と署名をサポートしている。 マルチシグアドレスの作…
以前、絶対時間を使用するOP_CLTV(BIP-65)で指定期間まで資金をロックするスクリプトを作成したので↓ techmedia-think.hatenablog.com 今回は、相対時間を使用するOP_CSV(BIP-112)↓を使って同様のことをやってみる。 techmedia-think.hatenablog.com OP_…
Open Assets Protocolのアセットを1トランザクションで交換するAtomic Swapをやってみた。 シナリオ アリスはアセットID”oQWgTxFmK2EAYuoDvs2bLPNo9MG5nXnmyM”のアセットを1,000個持っている。 ボブはアセットID”oM4p6N7CqTTcujSHkiRKXzzVcMuXek8aiz”のアセ…