ECDSA JavaScript

Có mấy thứ kỹ thuật vừa là tội vừa là thánh. ARP là một ví dụ và là một trong những giao thức kết nối tuyệt vời nhất nhưng lại là một thảm họa đối với bảo mật. Tuy nhiên, chính JavaScript mới có thể giữ vị trí hàng đầu cho một ngôn ngữ lập trình là một trong những ngôn ngữ tốt nhất và là một…

Thành phần JavaScript để ký và xác minh Mật mã Đường cong Hình elip. Gói này rất quan trọng để ký giao dịch. Hoạt động với cả Nút. js và trình duyệt

Thông tin gói hàng

Cách sử dụng

Cài đặt

npm install --save ecdsa

Thí dụ

var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true

bạn cũng có thể sử dụng một đường cong khác, có lẽ bạn sẽ không bao giờ cần phải làm điều này

//curves defined here: //github.com/cryptocoinjs/ecurve/blob/master/lib/names.js
var ecdsa = require['ecdsa']['secp160r1']

API

calcPubKeyRecoveryParam

[LÀM]

tất địnhGenerateK[hash, privateKey]

Được sử dụng bởi sign[] để tạo giá trị K một cách chắc chắn và an toàn. Từ RFC 6979

  • hash. Băm đó là để được ký kết
  • privateKey. Biểu diễn BigInteger của khóa riêng

parseSig[bộ đệm]

Phân tích cú pháp chữ ký và trả về một đối tượng có giá trị r

var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
0

  • var crypto = require['crypto'] //Node.js or Browserify [browser]
    
    var ecdsa = require['ecdsa']
    var sr = require['secure-random'] //npm install --save secure-random@1.x
    var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0
    
    var privateKey = sr.randomBuffer[32]
    var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses
    
    var msg = new Buffer["hello world!", 'utf8']
    var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
    var signature = ecdsa.sign[shaMsg, ck.privateKey]
    var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
    console.log[isValid] //true
    
    1. Chữ ký được mã hóa DER có phải là loại
    var crypto = require['crypto'] //Node.js or Browserify [browser]
    
    var ecdsa = require['ecdsa']
    var sr = require['secure-random'] //npm install --save secure-random@1.x
    var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0
    
    var privateKey = sr.randomBuffer[32]
    var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses
    
    var msg = new Buffer["hello world!", 'utf8']
    var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
    var signature = ecdsa.sign[shaMsg, ck.privateKey]
    var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
    console.log[isValid] //true
    
    0 không

parseSigCompact[bộ đệm]

[LÀM]

recoveryPubKey[e, chữ ký, i]

[LÀM]

serializeSig[chữ ký]

Tuần tự hóa một đối tượng chữ ký chứa các trường r

var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
0 thành chữ ký được mã hóa DER với loại
var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
0

Từ điển

var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
4 của Web Crypto API đại diện cho đối tượng sẽ được chuyển dưới dạng tham số
var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
5 vào
var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
6 hoặc
var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
7 khi sử dụng thuật toán ECDSA

Thuộc tính cá thể

var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
8

Một chuỗi. Điều này nên được đặt thành

var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
9

hash

Một chuỗi. Mã định danh cho thuật toán phân loại để sử dụng. Đây phải là một trong những điều sau đây

  • //curves defined here: //github.com/cryptocoinjs/ecurve/blob/master/lib/names.js
    var ecdsa = require['ecdsa']['secp160r1']
    
    1. chọn thuật toán SHA-256
  • //curves defined here: //github.com/cryptocoinjs/ecurve/blob/master/lib/names.js
    var ecdsa = require['ecdsa']['secp160r1']
    
    2. chọn thuật toán SHA-384
  • //curves defined here: //github.com/cryptocoinjs/ecurve/blob/master/lib/names.js
    var ecdsa = require['ecdsa']['secp160r1']
    
    3. chọn thuật toán SHA-512

Cảnh báo.

var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
50 cũng được hỗ trợ ở đây nhưng thuật toán SHA-1 được coi là dễ bị tổn thương và không còn được sử dụng nữa

ví dụ

Xem các ví dụ cho

var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
6 hoặc
var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
7

thông số kỹ thuật

SpecificationWeb Cryptography API
# SubtleCrypto-method-signWeb Cryptography API
# SubtleCrypto-method-verify

Tính tương thích của trình duyệt web

Các trình duyệt hỗ trợ thuật toán "ECDSA" cho các phương pháp

var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
6 và
var crypto = require['crypto'] //Node.js or Browserify [browser]

var ecdsa = require['ecdsa']
var sr = require['secure-random'] //npm install --save secure-random@1.x
var CoinKey = require['coinkey'] //npm install --save coinkey@0.1.0

var privateKey = sr.randomBuffer[32]
var ck = new CoinKey[privateKey, true] // true => compressed public key / addresses

var msg = new Buffer["hello world!", 'utf8']
var shaMsg = crypto.createHash['sha256'].update[msg].digest[]
var signature = ecdsa.sign[shaMsg, ck.privateKey]
var isValid = ecdsa.verify[shaMsg, signature, ck.publicKey]
console.log[isValid] //true
7 sẽ hỗ trợ loại này

hãy để hexToDecimal = [x] => ec. keyFromPrivate[x, "hex"]

getPrivate[]. toString[10];

hãy để pubKeyRecovery = ec. recoveryPubKey[

hex To Decimal[msg Hash], chữ ký,

Chữ ký. recoveryParam, "hex"];

bảng điều khiển. log["Đã khôi phục pubKey. ",

pubKeyRecovery. encodeCompressed["hex"]];

msgHash, chữ ký, pubKeyRecovery];

bảng điều khiển. log["Chữ ký hợp lệ?", hợp lệSig];

Chủ Đề