Bitcoin

ビットコインのアドレス生成の仕方

More than 1 year has passed since last update.


ビットコインのアドレス

ビットコインのアドレスは公開鍵と秘密鍵のペアです

ビットコインの公開鍵は特に暗号化するのに使うわけでもなくビットコインアドレスという支払い受付用の他人に見せてもよいアドレスにするためだけに使われます

秘密鍵はデジタル署名として使いトランザクションスクリプトを用いてビットコインの残高を動かすのに使います。

一般的な用途の公開鍵(暗号化)と秘密鍵(複合化)という使い方とは違った使い方をします。

(ただし、このアドレスは俺のものだと証明するのにk)

普段見かける1xxxxxxxxxx や 3xxxxxxxxxxxなどの形式はビットコインアドレスといい公開鍵にHash160とBase58Checkというチェックサム付きのエンコードをかけて表示しています


ビットコインアドレス生成の一連の流れ

bitcore-libというjavascriptのライブラリを用いてコードを記載します。

以下のコマンドでインストールできます


console

npm i bitcore-lib


秘密鍵->公開鍵->ビットコインアドレスと順番に生成していきますが逆にはたどれません。

※注意事項としてここでは秘密鍵を気軽にハードコードしてますがそれはかなり危険な行為です。


まずはランダムに秘密鍵の生成から


javascript

var bitcore = require('bitcore-lib');

var network = 'livenet';
var privateKey = new bitcore.PrivateKey(network);
console.log(privateKey.toString());


console

 69a97488152a6db9efe3f5c3d96b397cc09114c8267f4e0269830b47c9c04b69



生の秘密鍵からWIF形式の生成


  • WIFはウォレット間で秘密鍵を移動する場合に考案された方式


javascript

var bitcore = require('bitcore-lib');

var network = 'livenet';
var privkey = '69a97488152a6db9efe3f5c3d96b397cc09114c8267f4e0269830b47c9c04b69';
var privateKey = new bitcore.PrivateKey(privkey, network);
console.log(privateKey.toWIF());


console

 cR86SboG3dmS2u43hENCT2xfhtu8UkBcAqLFvJU55LvPw8CAjkFj



WIFから秘密鍵の取り込み


javascript

var bitcore = require('bitcore-lib');

var wif = 'cR86SboG3dmS2u43hENCT2xfhtu8UkBcAqLFvJU55LvPw8CAjkFj';
var privateKey = bitcore.PrivateKey.fromWIF(wif);
console.log(privateKey.toString());


console

 69a97488152a6db9efe3f5c3d96b397cc09114c8267f4e0269830b47c9c04b69



秘密鍵から公開鍵の取得


javascript

var bitcore = require('bitcore-lib');

var network = 'livenet';
var privkey = '69a97488152a6db9efe3f5c3d96b397cc09114c8267f4e0269830b47c9c04b69';
var privateKey = new bitcore.PrivateKey(privkey, network);
var publicKey = privateKey.toPublicKey();
console.log(publicKey.toString());


console

 02c8fa0c8d1edefcd78177af0d834cba9f49fd1396a214a204aaca81561eea02de



公開鍵からビットコインアドレスの取得


javascript

var bitcore = require('bitcore-lib');

var network = 'livenet';
var pubKey = '02c8fa0c8d1edefcd78177af0d834cba9f49fd1396a214a204aaca81561eea02de';
var publicKey = new bitcore.PublicKey(pubKey, network);
var address = publicKey.toAddress();
console.log(address.toString());


console

 1HGxskriFLBsnQcG2zb6LyZybJC97b3EZe



ビットコインアドレスを取得


javascript

var bitcore = require('bitcore-lib');

var network = 'livenet';
var btcAddr = '1HGxskriFLBsnQcG2zb6LyZybJC97b3EZe';
var address = new bitcore.Address(btcAddr, network);
console.log(address.toString());


console

 1HGxskriFLBsnQcG2zb6LyZybJC97b3EZe



ビットコインアドレスのバリデーションかける


javascript

var network = 'livenet';

var btcAddr = '1HGxskriFLBsnQcG2zb6LyZybJC97b3EZe';
var error = bitcore.Address.getValidationError(btcAddr, network);
if (error) {
// 無効なアドレス
var message = error.messsage;
}


参考ページ

技術者向けビットコイン講座 第2回 ビットコインアドレスと秘密鍵のフォーマット

ビットコインとは何か? 第3回:ビットコインの仕組み(アドレスの作成から送金まで)