Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

2018-04-01から1ヶ月間の記事一覧

シュノア署名を楕円曲線secp256k1を使ってpythonで計算してみる

シュノア署名(Schnorr Signature) シュノア署名を群の言葉で書きます。 秘密鍵と公開鍵の生成 STEP1 有限体 と素数位数lのベースポイントを生成する。 STEP2 乱数を秘密鍵とし、 を公開鍵とする。 STEP3 H()をハッシュ関数とし公開する。 署名 STEP1 メッセ…

batchTransferでみつかった脆弱性を確かめる

BeautyChain (BEC)などに実装された batchTransfer に見つかったぜい弱性 CVE-2018-10299 medium.com について試してみました。 remix で検証しました。 この 0x8000...0000 に2を掛けると、solidify のuint256実装では、桁あふれした分が差し引かれ、_amoun…

secp256k1 秘密鍵と公開鍵の演算

以下の関数の機能を見てみましょう。 func secp256k1_ec_privkey_negate(_ ctx: secp256k1_context, _ seckey: inout [UInt8]) -> Bool func secp256k1_ec_pubkey_negate(_ ctx: secp256k1_context, _ pubkey: inout secp256k1_pubkey) -> Bool func secp256…

secp256k1 ECDSA 秘密鍵の値の範囲と公開鍵の値の範囲

ECDSA の秘密鍵は1以上、群Gの位数未満です。 secp256k1 の群Gの位数は L = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141 ですが、256bitの正の値skをランダムに取り(0以上)、値が0だった場合と、L以上だった場合、値を取り…

secp256k1 署名をs-form にノーマライズする

前回の記事では、secp256k1ライブラリでは署名のsの値は値が小さい方を使うから注意せよと書きました。 ECDSA(secp256k1)での署名と検証をswiftで行う(secp256k1swiftライブラリ使用) - Pebble Coding 関数リストをよくみてみると、 secp256k1_ecdsa_signatu…

ECDSA(secp256k1)での署名と検証をswiftで行う(secp256k1swiftライブラリ使用)

前回、pythonで行なったECDSA(secp256k1)での署名と検証をswiftで行なってみます。 拙作 secp256k1swift GitHub - pebble8888/secp256k1swift: secp256k1 by pure swift を用いてみます。 ちなみに、このライブラリはbitcoinのC言語で書かれたライブラリ Git…

ECDSA(secp256k1)での署名と検証をpythonで行う(外部ライブラリ使用なし)

ECDSA(secp256k1)での署名と検証をpythonで行ってみます。 まずコードです。 ちなみにpython3です。 #!/usr/bin/env python # # secp256k1 # http://www.secg.org/SEC2-Ver-1.0.pdf # import sys import hashlib sys.setrecursionlimit(1500) b = 256 # q is…

ECDSA(secp256k1)での署名と検証をrubyで行う(ecdsaライブラリ使用)

ECDSAでの署名と検証をrubyで行います。 ECDSAの仕様はこちらです。 ECDSA(楕円曲線デジタル署名アルゴリズム)の概要 - Pebble Coding それではコードです。 #!/usr/bin/env ruby require 'ecdsa' require 'securerandom' require 'digest' def bin_to_hex(s…

python3 で hmac-sha512を計算する

python3.6.4を用いています。 import hmac import hashlib sk = str("secret").encode('utf-8') msg = str("message").encode('utf-8') sig = hmac.new(sk, msg, hashlib.sha512).hexdigest() print(sig) print(len(sig)) 1bba587c730eedba31f53abb0b6ca589e…

bitcoin-cli コマンドまとめ その2

ウォレットのダンプ $ bitcoin-cli dumpwallet a.txt { "filename": "/Users/pebble8888/Library/a.txt" } 第2引数には出力先のファイル名をいれます。 約4000行のファイル名が出力されました。先頭を少し加工して見てみます。 (ちなみにtestnet環境のもので…