我正在写一些needs to do electronic signatures。
有些用户会像我这样的极客,并且已经拥有自己的PGP密钥。大多数人不会,也不会想要安装或维护它。
作为一种解决方案,我想执行以下操作:
基本上有两种方法(对于没有自己的PGP密钥的用户)。
无论哪种方式,我也用服务器的密钥签署结果。但我需要有一个用户独特的,不可否认的方式让用户也可以签署文本,让他们拥有一个PGP密钥,我保持这是最简单的方法。
选项1要做得更简单,并且能够很好地满足我的最低需求。
选项2更值得信赖,除非我颠覆了JS(我仍然可以做到),否则我不能自己使用他们的私钥。
但是,为了做到这一点,我需要一个可以
的JavaScript库哪些图书馆可以做到这一点?
P.S。请注意,我不需要加密到给定的公钥。我需要用户使用他们自己的(加密存储的)密钥签名。
答案 0 :(得分:4)
查看http://openpgpjs.org - 它应该已经实现了您正在寻找的大部分功能。
答案 1 :(得分:3)
首先,请阅读这篇文章:http://www.matasano.com/articles/javascript-cryptography/
如果你仍然确信javascript加密对你正在做的事情是一个好主意,那么:
PGP相当复杂,你不需要它的95%,我建议你考虑使用Ed25519进行签名 - http://www.flownet.com/ron/code/ed25519.js提供了一个javascript版本。它是一个基于椭圆曲线的系统,比RSA快得多,具有相同的安全性和更小的密钥。事实上,密钥非常小,您可以让用户选择“签名密码短语”,将其作为salt以scilpt [1]的形式提供给他们,并将输出用作私钥(您只需要frob三位使其成为有效的Ed25519私钥)。
答案 2 :(得分:1)
我认为你的文章声称错误。 例如,它说,没有办法阻止例如math.RND()被覆盖 - 但它可以很容易地完成 - 在文件顶部用内联js编写html文件。 在那段代码中你冻结了每个对象,openpgp.js取决于。
所以你可以建立一个安全的环境。确实! 使用ssl传输index.html, 冻结重要的东西,防止加载其他js文件, 确保不允许与其他服务器的连接等等。