我正在寻找一种公钥加密算法,其中使用公钥加密数字签名比使用私钥解密解密计算成本更高,明显更贵。 (见下面的★为什么)
我已经描述了一些算法(sha1,md5 ...)并得到了这样的结果:
Public encryption: 330ms
Private decryption: 4474ms
如果时间值被颠倒,这将没有问题。有什么建议吗?
我的分析方法:
$res = openssl_pkey_new(array('encrypt_key' => false, 'digest_alg' => 'sha1',
'private_key_bits' => 1024));
openssl_pkey_export($res, $privatekey);
$publickey = openssl_pkey_get_details($res);
$publickey = $publickey["key"];
function rutime($ru, $rus, $index) {
return ($ru["ru_$index.tv_sec"]*1000 + intval($ru["ru_$index.tv_usec"]/1000))
- ($rus["ru_$index.tv_sec"]*1000 + intval($rus["ru_$index.tv_usec"]/1000));
}
$cleartext = "Hey hello hi";
$crypted = array();
$reps = 10000;
// test public key encryption time
$rustart = getrusage();
for ($i = 1; $i <= $reps; ++$i) {
openssl_public_encrypt($cleartext, $crypttext, $publickey);
$crypted[] = $crypttext;
}
$ru = getrusage();
echo "Public encryption: ".rutime($ru, $rustart, "utime")."ms\n";
// test private key decryption time
$rustart = getrusage();
for ($i = 1; $i <= $reps; ++$i) {
$crypttext = &$crypted[$i];
openssl_private_decrypt($crypttext, $decrypted, $privatekey);
}
$ru = getrusage();
echo "Private decryption: ".rutime($ru, $rustart, "utime")."ms\n";
★...因为我正在研究让“说话”比“倾听”更昂贵的方法。如果客户端在将消息发送回服务器之前必须进行困难的加密数学运算,并且服务器可以轻松地使用加密数学来验证该消息,那么它会使用脚本更难以向服务器发送垃圾邮件。