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ếtprivateKey
. Biểu diễnBigInteger
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
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
0
1. Chữ ký được mã hóa DER có phải là loạivar 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ôngvar 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
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
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
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
0Từ đ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 ECDSAThuộ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
8Mộ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
9hash
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
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//curves defined here: //github.com/cryptocoinjs/ecurve/blob/master/lib/names.js var ecdsa = require['ecdsa']['secp160r1']
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ữaví 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
7thô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àyhã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];