Tag: 签名

为什么nodejs / cookie中的cookie签名使用sha1-hashing来比较签名?

我只是看着执行cryptograhic签名扩展的快递,允许创build签名的cookie。 签名函数中的mac按照此处所述进行计算: 创build一个SHA256的实例 散列数据值 创build一个base64编码的摘要 删除结尾的相等字符('=') 结果是原始值和计算出的mac的连接。 在validation签名时,值再次被签名。 但是,然后不对签名进行相等testing,但是比较由原始值和附加的mac组成的整个string: return sha1(mac) == sha1(val) ? str : false; 这里“mac”包含原来的值与一个新计算的mac连接,“val”包含传递给validation方法的inputstring(包含与原mac连接的原始值),“str”是有符号值本身。 请参阅: https : //github.com/tj/node-cookie-signature/blob/master/index.js 我本来预料只有苹果机才会被比较。 但这种情况并非如此。 为什么作者select这种实施validation的方式? 这是什么原因? 特别是:为什么他们不把字符与char1进行比较,而是对sha1进行比较?

无法使用nodejsencryption签名文件

我已经用nodejsencryption创build了一个私钥,并且想用这个密钥来签署一个文件。 我的代码如下: var ecdh = crypto.createECDH('brainpoolP512t1'); ecdh.generateKeys(); var key = ecdh.getPrivateKey('buffer'); var data= fs.readFileSync(req.file.path); var sign = crypto.createSign('sha512'); sign.update(data); var signature = sign.sign(key, 'hex'); 但是我得到的错误: Error: error:0906D06C:PEM routines:PEM_read_bio:no start line at Error (native) at Sign.sign (crypto.js:283:26) at /….js:32:27 at Immediate.<anonymous> (/…/node_modules/multer/lib/make-middleware.js:52:37) at runCallback (timers.js:578:20) at tryOnImmediate (timers.js:554:5) at processImmediate [as _immediateCallback] (timers.js:533:5) 我知道这与关键格式有关,但我不知道如何解决这个问题。 谁能帮忙? 更新:我编辑的私钥以适应pem格式: […]

安全签名algorithm的兼容性

经过一番研究之后,似乎有人build议使用带有PSS填充的RSA,因为它的安全属性已经很好了。 问题在于签名algorithm很难兼容 ,特别是对于这样的需求。 我想实现的是至less在以下环境中进行签名和validation: 牡丹 OpenSSL的 encryption+ Node.js(使用OpenSSL) 在PolarSSL和其他软件上兼容也许会很有趣。 在node.jsencryption页面中有一个关于创build和validation签名的例子。 这很好,但我需要与Botan EMSAx(SHA256)兼容,并且真的认为签名应该用RSA-PSS之类的安全软件来填充。 节点示例页面仅显示'RSA-SHA256'但没有使用填充。 PSS填充可以通过使用OpenSSL来实现: openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:32 \ -sign rsa.key -out data.txt.sha256 data.txt 我的testing代码看起来像这样: var s = crypto.createSign('RSA-SHA256'); var key = fs.readFileSync('rsa.key').toString(); s.update(message); var signature = s.sign(key, 'base64'); 但它为相同的input产生相同的输出,这不是我想要的,而且显然与我使用Botan的C ++实现不兼容。 如果无法以最小的努力达到兼容性,对于selectalgorithm的任何build议,我可能会努力尝试联系这些encryption库的开发者,看看是否有一个algorithm的共识来获得作为事实上的标准实施。 (是的,我知道这似乎是绝望。)是否有这样的持续努力?

节点js中的RSACryptoServiceProvider

我必须在节点js中签名一个string,就像使用RSACryptoServiceProvider的C#应用​​程序一样。 其实它用 X509Certificate2 certificate = new X509Certificate2("file.pfx", "aPassword", X509KeyStorageFlags.Exportable); RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)RSACryptoServiceProvider.Create(); rsa.FromXmlString(certificate.PrivateKey.ToXmlString(true)); signer = new RSAPKCS1SignatureFormatter(rsa); signer.SetHashAlgorithm("SHA256"); byte[] signedData = signer.CreateSignature("a string"); string signedString = Convert.ToBase64String(signedData); 我试过在节点js中做同样的事情,到目前为止,以这种方式使用jsonwebtoken var kdrPrivateKey = fs.readFileSync('private_key.pem'); var authorizationSigned = jwt.sign("a string", kdrPrivateKey, { algorithm: 'RS256'}); var authorizationBase64 = Base64.encode(authorizationSigned); 我也通过这种方式从file.pfx中获得了private_key openssl pkcs12 -in file.pfx -nocerts -out private_key.pem -nodes […]

使用encryption库在NodeJS中创buildPGP兼容签名

在看encryption库我看它有能力签署数据。 有没有人知道如果一个PGP兼容的签名就像encryptionencryption库的符号命令的输出一样简单? 我有一个应用程序,需要签署和使用PGP只签署数据。 我看了OpenGPGJS项目; 但是当我使用我的应用程序的时候会炸掉它 。 我一直在尝试使用kbgpg,但是他们的文档并不是那么好, 当我按照他们默认的签名数据的例子,当我试图使用Kleopatra来validation一切都是正确的时候,签名甚至不被识别为签名。 即使我将“GPG MESSAGE”块改为“PGP SIGNATURE”块,也是如此。 由于我不需要encryption,只是签名,我以为直接使用Crypto库可能是最简单的解决scheme,但我很难find文档来validation它可以轻松完成。

单字符签名scheme(最低安全性)

注意:我最初把这个发布到信息安全 ,但是我开始认为它可能更有意义,因为它确实是确定我应该怎样处理请求,而不是保护信息。 情况 系统A : 我有一个向用户提供请求的系统A 此服务器执行某些操作,然后将用户redirect到系统B 在这个redirect过程中,服务器A可以给用户一个32个字符的字母数字string信息传递给系统B 需要31个字符的信息,但是可以使用一个校验和。 这个string可以或多或less的被认为是一个请求ID。 系统B : 当系统B收到用户的请求时,可以通过parsing31个字符的string,查询数据库和与系统A通话来validation请求(和类IDstring)是否有效。该系统可以用绝对确定请求是有效的并且没有被篡改,但是这在计算上是非常昂贵的。 攻击者: 这个系统很可能会看到许多欺骗ID的尝试。 这是由后来的检查过滤,所以我不担心一个字符完全签署的ID, 但我想避免花费更多的资源来处理这些请求比需要。 我需要的 我正在寻找一个校验和/签名scheme,可以用单个字符给我一个很好的想法,请求是否应该继续进行validation过程,或者应该立即丢弃为无效。 如果一条消息被丢弃,我需要100%确定它是无效的,但是如果我保留无效的消息也没问题。 我相信一个理想的解决scheme将意味着1/62无效请求被保留(攻击者必须猜测检查字符),但是作为放弃一半无效请求的最小解决scheme就足够了。 我所试过的 我已经看过使用Luhnalgorithm(与信用卡相同的algorithm),但我希望能够使用密钥来生成angular色,以使攻击者更难以伪造校验和。 作为创build签名scheme的第一次尝试,我用31个字节的键逐个对31个字节的ID进行异或,将所得到的字节相加,转换为十进制并将数字相加,直到小于62,然后映射它到集合[a-bA-Z0-9]的字符(下面的伪代码)。 问题是,虽然我敢肯定,这不会丢弃任何有效的请求,我不知道如何确定这将通过无效的ID或如果密钥可以检索使用最终值的频率。 Set alphabet to (byte[]) "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; Set keystring to "aLaklj14sdLK87kxcvalskj7asfrq01"; Create empty byte[] key; FOR each letter in keystring Push (index of letter in alphabet) to key; Create empty byte[] step1; […]