Ruby
MuSigは、Schnorr署名でn-of-nのマルチシグを実現するにあたって、Rogue-Key攻撃に対する堅牢性を備えた署名プロトコル。MuSigは 署名に使用するPublic nonceのコミットメントの交換 Public nonceの交換 部分署名の作成、交換 という3ラウンドの通信を必要と…
多項式コミットメントの1つであるKZG commitmentについて↓ techmedia-think.hatenablog.com より詳しく理解するためにRubyで実装してみた↓ https://github.com/azuchi/kzg/ セットアップ KZG commitmentはまず最初に公開パラメーターを生成する。これは基本…
Bitcoinの新しいトランザクションリレープロトコルの提案Erlay↓ techmedia-think.hatenablog.com のコアとなる実装の1つがMinisketch。 Minisketchは、2つの集合の対称差を求めるアルゴリズムPinsketchを実装したライブラリ。つまりAとBという2つの集合があ…
前回の記事でTaroのアセットツリーの構造を確認したので↓ techmedia-think.hatenablog.com 今回は、Taroでのアセット発行の仕組みをRubyで実装しながらみていく。 tarocliを使ったアセットの発行 tarocliのassets mintコマンドを利用するとアセットを新規発…
techmedia-think.hatenablog.com techmedia-think.hatenablog.com ときたので、残りのRecoverおよびDeactivate操作をアンカリングしてみる。 Recover操作 Recoverは、Update Keyの更新とRecovery Key自体の更新および、DID State Patcheで定義したDID Docume…
前回の記事でIONのDIDを登録したので↓ techmedia-think.hatenablog.com 今回は、登録したDIDの鍵を更新するUpdate操作をアンカリングしてみる。 Update操作 Update操作は、現在DIDに紐付けられているUpdate Keyを使ってDID Documentの更新(署名鍵やservice…
前回は、IONのDIDを生成した↓ techmedia-think.hatenablog.com ↑では、DID Documentを生成し、IONのプロトコルに沿って識別子であるDIDを計算したけど、実際にこれだけだとローカルで計算してるだけなので、続いて、このDIDをCAS(Content Addressable Stora…
IONはMSが中心になって開発したDIDのプロトコルの1つ(did:ion)。実体は、アンカリング先のブロックチェーンにBitcoin、Content-Addressed Storage System(CAS)ノードにIPFSを用いたSidetreeプロトコルになる。この他にアンカリング先をEthereumにしてSid…
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…