项目作者: kevinejohn

项目描述 :
Chaum's Blind Signatures
高级语言: JavaScript
项目地址: git://github.com/kevinejohn/blind-signatures.git
创建时间: 2018-01-21T00:52:37Z
项目社区:https://github.com/kevinejohn/blind-signatures

开源协议:MIT License

下载


Chaum’s Blind Signature

NPM Package

Two implementations of RSA Blind Signatures

  1. ./rsablind.js
    https://en.wikipedia.org/wiki/Blind_signature

  2. ./rsablind2.js
    https://github.com/arisath/Blind-RSA

The RSA key generation uses the node-only module node-rsa but everything else should work outside of node.js

Use

npm install --save blind-signatures

  1. const BlindSignature = require('blind-signatures');
  2. const Bob = {
  3. key: BlindSignature.keyGeneration({ b: 2048 }), // b: key-length
  4. blinded: null,
  5. unblinded: null,
  6. message: null,
  7. };
  8. const Alice = {
  9. message: 'Hello Chaum!',
  10. N: null,
  11. E: null,
  12. r: null,
  13. signed: null,
  14. unblinded: null,
  15. };
  16. // Alice wants Bob to sign a message without revealing it's contents.
  17. // Bob can later verify he did sign the message
  18. console.log('Message:', Alice.message);
  19. // Alice gets N and E variables from Bob's key
  20. Alice.N = Bob.key.keyPair.n.toString();
  21. Alice.E = Bob.key.keyPair.e.toString();
  22. const { blinded, r } = BlindSignature.blind({
  23. message: Alice.message,
  24. N: Alice.N,
  25. E: Alice.E,
  26. }); // Alice blinds message
  27. Alice.r = r;
  28. // Alice sends blinded to Bob
  29. Bob.blinded = blinded;
  30. const signed = BlindSignature.sign({
  31. blinded: Bob.blinded,
  32. key: Bob.key,
  33. }); // Bob signs blinded message
  34. // Bob sends signed to Alice
  35. Alice.signed = signed;
  36. const unblinded = BlindSignature.unblind({
  37. signed: Alice.signed,
  38. N: Alice.N,
  39. r: Alice.r,
  40. }); // Alice unblinds
  41. Alice.unblinded = unblinded;
  42. // Alice verifies
  43. const result = BlindSignature.verify({
  44. unblinded: Alice.unblinded,
  45. N: Alice.N,
  46. E: Alice.E,
  47. message: Alice.message,
  48. });
  49. if (result) {
  50. console.log('Alice: Signatures verify!');
  51. } else {
  52. console.log('Alice: Invalid signature');
  53. }
  54. // Alice sends Bob unblinded signature and original message
  55. Bob.unblinded = Alice.unblinded;
  56. Bob.message = Alice.message;
  57. // Bob verifies
  58. const result2 = BlindSignature.verify2({
  59. unblinded: Bob.unblinded,
  60. key: Bob.key,
  61. message: Bob.message,
  62. });
  63. if (result2) {
  64. console.log('Bob: Signatures verify!');
  65. } else {
  66. console.log('Bob: Invalid signature');
  67. }