Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.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
为什么可以';t我使用键长度<;PHP OpenSSL中EC的384位?_Php_Cryptography_Elliptic Curve_Php Openssl - Fatal编程技术网

为什么可以';t我使用键长度<;PHP OpenSSL中EC的384位?

为什么可以';t我使用键长度<;PHP OpenSSL中EC的384位?,php,cryptography,elliptic-curve,php-openssl,Php,Cryptography,Elliptic Curve,Php Openssl,很明显,384位RSA密钥是非常不安全的。 关于RSA也有一个类似的问题:为什么对于openssl_pkey_new(),keysize

很明显,384位RSA密钥是非常不安全的。 关于RSA也有一个类似的问题:为什么对于openssl_pkey_new(),keysize<384位被认为太小了

然而,384位EC密钥目前被认为是非常安全的。 在我的例子中,384位太长,这就是为什么我想使用256位键

为什么以下代码抛出
警告:openssl\u pkey\u new():私钥长度太短;它至少需要384位,而不是256位

<?php
$config = array(
    "private_key_type" => OPENSSL_KEYTYPE_EC,
    "private_key_bits" => 256,
    "curve_name" => "prime256v1"
);

// Create the private and public key
$res = openssl_pkey_new($config);

从中可以看出,
openssl\u pkey\u new
调用
php\u openssl\u generate\u private\u key
,它检查用
private\u key\u位传递的密钥大小,而不考虑密钥类型,如果大小小于
MIN\u key\u LENGTH
,则返回发布的错误,定义为
384
。这适用于从V7.4.7到V4.0的当前版本。与当前版本相比,V4.0仅支持RSA密钥,因此可以由此得出结论,
384
位的密钥大小指的是RSA密钥

由于EC密钥比安全性相当的RSA密钥小(第7章,推荐密钥大小),因此特定于密钥类型的检查更有用。
384
位的EC密钥的最小长度不合理。但对于RSA来说,
384
位的值在今天看来太小了

php_openssl_generate_private_key
中还可以看到,在密钥生成过程中,密钥大小仅用于RSA、DSA和DH密钥的上下文中,而完全不用于EC密钥的上下文中,其中使用了曲线名称。也就是说,EC密钥上下文中不需要使用
私钥位指定的密钥大小(可能不是预期的),因此应省略,这也避免了错误消息:

<?php
$config = array(
    "private_key_type" => OPENSSL_KEYTYPE_EC,
    "curve_name" => "prime256v1"
);

$res = openssl_pkey_new($config);
print_r(openssl_pkey_get_details($res));
?>


为了完整性:如果未使用
private\u key\u bits
指定密钥大小,则将使用OpenSSL配置文件中的默认值对其进行初始化,对于当前版本,该值为
2048
位。此值对应于RSA的当前建议值(,2.2.1建议的密钥大小和算法),也是在EC密钥上下文中未触发错误消息的原因

openssl\u pkey\u new
调用
php\u openssl\u generate\u private\u key
,检查指定的密钥大小是否小于定义为
384
MIN\u key\u LENGTH
。这适用于V4.0以下的当前版本,该版本仅支持RSA密钥。所以这可能是指RSA(根据今天的标准,384对于RSA来说也太小了)。在EC关键点的上下文中,在生成过程中根本不使用关键点大小,而仅使用曲线名称。只需在EC密钥的上下文中省略密钥大小,就不会触发错误。@Topaco:不幸的是,许多php文档都很糟糕,因此stackoverflow必须作为php文档使用。你能回答这个问题吗?Topaco,非常感谢。多亏了你的建议,我才有了这个工作。是的,请回答,我很乐意接受!谢谢。我希望PHP文档在这种情况下会更好!