【问题标题】:Issue with the returned keys as the public key is longer than the private返回密钥的问题,因为公钥比私钥长
【发布时间】:2015-06-03 16:10:02
【问题描述】:

我正在使用 openssl_pkey_new 生成密钥对。返回的密钥似乎存在问题,因为公钥比私钥长。使用私钥签名的数据可以使用公钥进行验证。我只是想确保我没有在某处做错什么。谢谢

这是我用来生成密钥的代码:

$config = array(
"digest_alg" => "sha512",
"private_key_bits" => 4096,
"private_key_type" => OPENSSL_ALGO_SHA1,
);

$res = openssl_pkey_new($config);
openssl_pkey_export($res, $privKey);
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];

这是我用来签名和验证的代码

//sign data
openssl_sign($data, $signature, $privKey, OPENSSL_ALGO_SHA1) or die("ERROR");
$signature = base64_encode($signature); 

//validate signature
$signature = base64_decode($signature);  
$valid = openssl_verify($file, $signature, $pubKey, OPENSSL_ALGO_SHA1);

以下是从我的服务器(Ubuntu 14.04)返回的示例密钥:

-----BEGIN PRIVATE KEY-----
MIIEZQIBADCCBDoGByqGSM44BAEwggQtAoICAQC15h4XFOpUx1KgHisqrj0hkuyk
iGoLqS/qYqXCoBAN7jMO/vLdVpKlmy6jeGGl0aA/SfIgX4EUTMoMcTTEPi7YSbjg
JiAtuOEGLYHI+94/xbd8+9M//RGV5EhR4LqsaxQPIdQv9JY8EBeZ7hqab5Mx+nQI
zV7r4017dTQyvpxiXQg+3cAp/TZnY+ptlYLhup4RGL0VluJrEfkQj53n65YEm19f
YQMp2Qq5CPQu5mUzDJLXZYFinwlLV+rtKKFfkdhu7/KLyVVf+XTl/ftxWBgqJLS7
RuBJOKM1rNlDvrGAo9ow2vU/siTIxkaCM0LYSFEv5d+jmkkXR3tNaK+Yv6Z7oNix
f+MZBBvI+kOSZdLj2t+9K5CjpwstB4Um5iEFiFe6srE/PMnINlNrwLt34emY9nUs
ozzL9B6DkceTr8XygDRDHqWArbO62/rdx28el/OBkolCpQWyo32Jwu54DNLxZjbG
bVuyLQXSvPzoL+FJFSjqaO5DA0ThwcHk5BJEKEVijQPYTNW7s9RwSPSYDtAyIV17
ABfCE3SWmVEuc5lubRqpbBoNlYYav8SumNVmTPhb7SDpnKcoCGbRYxigiYZ3PkZ3
ylh3oOlmodNzKaCF6xoswgdYH5EBr4b6pvuEO3AHm8/Y4oRcsOBmkN83fx1daL/d
CPv9RJ/M84LNJ6ai4QIhAJyNUW+/L7Gz61Y2ZcDOT9ZNuzAjud9yL5y7/kMGJlxJ
AoICAQCSfv09VttO+p5V0d2Sb0BcFF00c9jMDlvhHvFi7EfZt7d0qVimyKegg2Rk
Ryw5xfF3iknWq5ogPOjHZuNurf/rMETZ9gHt2oKOutIWiYko//n1wXwXStjDdi/O
2IX87e84UCJeLDHkc6uK3FJvob+qyOKhosEWKiawtCTMQkCS645pJPk3JKK2LQTz
c596wmht9WmfJQVQU202OQHEzJwX/xiXyyRDdmYVSQ7/BFglqVsNsqZTFU7kBc1b
6WAb+V1VAg4KDm3/HhfUkx6TwKpPuU5RggJlNUFauGSZb6jTeEy4pGRaoMB0MUuA
1fsuzQgEe66OdMfVI1JxqV+MNHxH/scqz7hjdxjWemboQFVEAE7mxBy0bf/X58MJ
VZSrwn5WV03Jq/aE57Pmj4a5TMbDtKus8MxQwBgucPtK7jIyXqdHZXUPnpbdYVAM
qqvX3mP+jIepGvX+ijlShaaaIBnmuJzjBfqsez0uTRzfmoWUFX92okYn+1/DnbNX
DIXXrR1A6ZSuDolGyDj5lKXjbI6Uuln3Nfps/3UFKV3QDPzWDhCmGAG5hN6XhLMn
m+38IcHMuPNMt2QDAjH5fCHXI6wvcNLFI9U00arABSdxHBEET93/WgZj2S2HnAjG
wMgt9pjWUZ8PuFw6nJF4U9uEft/XiR6iwKzRzQy8fcyW6uv2bAQiAiB7M9Ej3OKN
DAGV1lKKijODBVsDjfwo4MNjiGqHjDvqug==
-----END PRIVATE KEY-----

-----BEGIN PUBLIC KEY-----
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
wVDtl2d4MKvtijLhHpzxtAHuhax6hBg2ViuUjg==
-----END PUBLIC KEY-----

【问题讨论】:

标签: php encryption openssl cryptography


【解决方案1】:

这些是具有 256 位素数 q 和 4096 位模数 p 的 DSA 密钥。对于 DSA 密钥,随机秘密 x 的顺序为 q,公共 y 值的顺序为 p (y = g^x mod p)。在这种情况下,公钥和私钥都包含所有参数pq 和生成器g。但由于y 大于x,公钥仍然大于私钥。这是设计使然。

另一方面,RSA 密钥通常有一个小的公共指数e 和一个模数大小的私有指数d。此外,私钥通常包含执行中国剩余定理计算所需的所有参数(这使 RSA 加速了 4 倍)。因此,对于 RSA,私钥通常比公钥大得多。

您可以使用在线 ASN.1 解码器检查 public key 和私钥的值(不要复制以 --- 开头的行)。然后您可以使用 OID 存储库查找DSA OID。如果您不介意,我不会访问DSA wikipedia page

【讨论】:

    猜你喜欢
    • 2016-09-25
    • 2022-01-15
    • 2020-04-07
    • 1970-01-01
    • 2011-07-18
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多