Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有SHA512的PHP openssl_签名_Php_Openssl_Sha512_Dsa - Fatal编程技术网

带有SHA512的PHP openssl_签名

带有SHA512的PHP openssl_签名,php,openssl,sha512,dsa,Php,Openssl,Sha512,Dsa,有没有机会让PHP的openssl_sign方法与SHA512(或任何其他SHA2家族成员)一起工作 如果我使用RSA作为密钥类型(OPENSSL_KEYTYPE_RSA)并通过 openssl_sign($data, $signature, $privatekey, 'sha512'); 一切正常 但是,当使用OPENSSL_KEYTYPE_DSA时,签名仍然为空 在一次会议上,我发现: “如果希望使用DSA算法对数据进行签名或验证,则必须使用dss1摘要。” 所以我尝试了DSA: open

有没有机会让PHP的openssl_sign方法与SHA512(或任何其他SHA2家族成员)一起工作

如果我使用RSA作为密钥类型(OPENSSL_KEYTYPE_RSA)并通过

openssl_sign($data, $signature, $privatekey, 'sha512');
一切正常

但是,当使用OPENSSL_KEYTYPE_DSA时,签名仍然为空

在一次会议上,我发现: “如果希望使用DSA算法对数据进行签名或验证,则必须使用dss1摘要。”

所以我尝试了DSA:

openssl_sign($data, $signature, $privatekey, 'dss1');
而且效果很好

我更喜欢使用DSA,因为它创建的签名更短,更适合我的用例。
然而,我担心的是DSS1基本上是SHA1,不应该再使用了。这是否也适用于与DSA的组合?有没有办法解决这个问题,并将DSA与SHA512一起使用?

这不是一个真正的答案,但我在评论中读不懂

OpenSSL手册页说明已过时(注)。OpenSSL 0.9.8使用“EVP”API(命令行dgst和其他API一起选择了哈希和PKalg,因此只能使用SHA1执行DSA(由原始的无后缀FIPS指定),并将其称为DSS1(如您所发现的)。此外,它只能生成子组(q)大小为160的DSA参数,尽管FIP以64的步长表示512到1k,但它可以生成大于1k的组(p)大小(这在1995年很好)

在1.0.0和1.0.1中,使用新的和改进的API,您可以生成所有FIPS186-3参数大小(1k/160、2k/224、2k/256、3k/256),并使用4个原始SHA-2散列中的任何一个对任何正常大小的DSA进行签名/验证,其中每个FIP会截断一个大于q(子组)的散列,因此基本上是浪费的。(IIRC FIPS180-4中添加的3个SHA-2“斜杠”变体尚未在OpenSSL中作为哈希实现,更不用说签名了。)

正如您已经明确确认的那样,OpenSSL自0.9.8以来支持RSA,并且(我非常肯定)支持从MD2到SHA512的所有哈希。但SHA512就像施奈尔的万里高赌注;根据NIST和ECRYPT(见www.keylength.com)的数据,为了使RSA保持其标称强度,您需要超过15kbits,这将是缓慢的

ECDSA产生同样小的特征值,预计在现在或很快想要的更高强度下可以更好地扩展

如果、何时以及如何在PHP中提供(或如何提供),我一无所知

和加密一样,如果您与一个或多个其他系统进行互操作,请检查它们的功能


(注意)在上个月(咳嗽,咳嗽)的兴奋之后,从事OpenSSL工作的人数猛增,有些人甚至在做一些枯燥的工作,如doc和测试,这些工作已经落后了很多年,因此我将对此提出一个修复请求。

只是暗中试探,但SHA160可用吗?它匹配SHA1的散列长度,因此可以兼容,但更安全。据我所知,没有SHA160这样的东西。SHA-0和SHA-1都使用160位密钥。这不是标准的,但一些库提供了被截断为160位的SHA256,比如SHA224,但更短。如果有办法将其传递给DSA,您可以自己进行截断。感谢您分享有关此主题的一些背景信息。我投了你一票,但正如你已经提到的,这并不是我问题的答案