Pebble Coding

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

2018-01-01から1年間の記事一覧

base58をpythonで試す

base58は大まかに言ってbase64を改良したものです。 base64は64個の文字とパディングに=(イコール)を使うものです。WEBプログラマなら説明は不要でしょう。 base58はbase64から小文字のl(エル),大文字のI(アイ),大文字のO(オー),0(数字のゼロ),+(プラス),/(…

シュノア署名を楕円曲線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環境のもので…

postgres インストール後に行うセットアップ for rails

$ pg_ctl -D /usr/local/var/postgres start && brew services start postgresql $ psql postgres # create role myuser with login password mypass; # alter role myuser createdb; # \q; ruby用の環境変数 DATABASE_URL=postgres://myuser:mypass@{hostna…

ruby rcdsa gemを用いたsecp256k1の鍵ペア生成

$ irb irb(main):001:0> require 'ecdsa' => true irb(main):002:0> require 'securerandom' => true irb(main):003:0> group = ECDSA::Group::Secp256k1 => #<ECDSA::Group:secp256k1> 法素数 irb(main):005:0> group.field.prime => 115792089237316195423570985008687907853269984</ecdsa::group:secp256k1>…

ruby製bitcoinツールのインストール

$ sudo gem install bitcoin-ruby $ sudo gem install openassets-ruby $ sudo gem install ecdsa

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

Original Bitcoin client/API calls list - Bitcoin Wiki コネクション数表示 bitcoin-cli getconnectioncount 8 コネクション情報表示 bitcoin-cli getpeerinfo [ { "id": 8, "addr": "35.187.63.250:18333", "addrlocal": "103.5.140.142:61962", "addrbin…

macos環境でbitcoinフルノード をソースからビルドする(version 0.16 2018-03-25)

macos環境でbitcoinフルノードをソースからビルドします。 以下の手順通りでOKです。 GUI版をインストールしたくない場合はqtを省略します。 https://github.com/bitcoin/bitcoin/blob/master/doc/build-osx.md $ brew install automake berkeley-db4 libtoo…

ECDSA(楕円曲線デジタル署名アルゴリズム)の概要

ECDSA(Elliptic Curve Digital Signature Algorithm)の概要です。 要点だけをまとめ、異例のチェックや楕円曲線上の点であるかどうかなどの細かな点は省きます。 正確な仕様は以下です。 AMERICAN NATIONAL STANDARD X9.62-1998 Public Key Cryptography For…

コミットメントスキーム(=ビットコミットメント)

コミットメントスキームの概念を理解するために、まず、コイン投げプロトコルを考えます。 Alice,Bobの2人が同じ場所に居合わせ、Aliceがコインを投げ、Bobが表が出るか裏が出るかを当て、勝敗を決めるゲームを考えます。 このゲームの手順のことをプロトコ…

JSONRPC をpython で体験する

RPC(リモートプロシージャコール)とはRESTと同じような、 特定フォーマットのHTTPリクエストを受け取り、レスポンスを返すプロトコルの一種です。 フォーマットには XML, JSON, protocol buffer, messagepack などあります。 最後の2つはバイナリフォーマッ…

ビットコインにおけるブルームフィルターとマークルツリーパス

現時点(2018年2月)において2009年から作られたビットコインのブロックの数(=ブロック高)は、 こちら Bitcoinブロックエクスプローラ - ブロックチェーン をみるとわかるように、 508786 です。 最新の4つのブロックを見ると、一つのブロックには、200 ~ 160…

2017年買ってよかったモノベスト3

2017年買ってよかったモノベスト3です。 第3位 MacBookPro 2017 13inch www.apple.com 今まで、iOSアプリ開発用には MacBook Air を使っていましたが、Storyboardを開くのにメモリ不足で、 きつくなってきていたので、入手を決めました。 Storyboardを開く…

クラウドマイニング HashFlare で SHA256 (BTC) にいくらか突っ込んでみた(2018年2月)

クラウドマイニングやってみたいなーという簡単な気持ちで、HashFlare のSHA256 (BTC) に少額を突っ込んでみました。 HashFlareはスコットランドの会社らしいです。 メリット、デメリット マイニング機材の購入維持、マシンの騒音を気にする必要がないという…

Monacoin を MacBook Pro で CPU マイニングできるか試してみた

この記事は2018-1-28時点のものです。備忘録として手順を残しておきます。 マシン: MacBook Pro 2017 モナコインのウォレットをダウンロード Monacoin project ここからmacOSX版のウォレットをダウンロードします。 立ち上げると全トランザクションのダウン…