※勉強内容のアウトプットです。
電子署名とは
電子文書上の署名全般を言う。
買い物のお会計の時にタブレットにするサインも電子署名であり、
以下で述べる公開鍵暗号方式を用いたデジタル署名も電子署名の一種である。
デジタル署名とは
公開鍵暗号方式を利用した電子署名である。
デジタル署名によって証明できることは以下のようなことである。
- 送信されたデータは確かに秘密鍵の持ち主から送信されたものである。
- 手元にある公開鍵は確かに送信者の秘密鍵に対応する公開鍵である。
- 送信データが改ざんされていない。
※注意点としては、以上のことだけではなりすましを完全には防げない。デジタル署名の仕組みは別記事に起こそうと思います。
BitcoinJSを使った署名データの作成
// ライブラリ読み込み
const bitcoinjs = require('bitcoinjs-lib')
const crypto = require('crypto')
const data = '署名対象データ'
// 署名対象データをハッシュ化
const dataHash = crypto.createHash('sha256').update(data).digest()
console.log('Date Hash: ' + dataHash.toString('hex'))
// ECPair生成
const ECPair = bitcoinjs.ECPair.makeRandom({rng: crypto.randomBytes, compressed: false})
// 署名データ作成
const signature = ECPair.sign(dataHash)
console.log('Signature: ' + signature.toString('hex'))
署名対象データはそのままだとサイズが大きいことがあるので、署名対象データは通常、事前にハッシュ化する。
今回はSHA256を使用し、32バイトのメッセージダイジェストに対して署名した。