首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用gpg测试对称与非对称加解密的速度

用gpg测试对称与非对称加解密的速度
EN

Cryptography用户
提问于 2020-04-01 14:22:07
回答 1查看 936关注 0票数 1

我知道对称比非对称更快。

我想测试这个,但是我的测试(显然不正确)显示了相反的情况。

对称试验:

代码语言:javascript
复制
#!/bin/bash

echo create random 100Mib binary file
head -c 100M /dev/urandom > blob

echo encrypt
time gpg --symmetric --batch --passphrase 123 --output blob.gpg blob

echo decrypt
time gpg --decrypt --batch --passphrase 123 --output blob blob.gpg

非对称测试(使用弗雷德的4096位键区,由gpg生成):

代码语言:javascript
复制
#!/bin/bash

echo create random 100Mib binary file
head -c 100M /dev/urandom > blob

echo encrypt using public key
time gpg --encrypt --recipient fred --output blob.gpg blob

echo decrypt using private key
time gpg --decrypt --batch --output blob blob.gpg

结果:

代码语言:javascript
复制
encryption : symmetric  : 6.2s
encryption : asymmetric : 5.8s         # I expected this to be > 6.2

decryption : symmetric  : 2.5s
decryption : asymmetric : 1.4s         # I expected this to be > 2.5

有人能发现我的错误吗?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2020-04-01 15:13:16

现在100 MiB已经不算什么了。不过,大多数时间可能是由于I/O操作而不是加密/解密而花费的。一旦在RAM中缓冲了文件,操作就会进行得更快。更糟糕的是,在加密期间,大部分时间都是在输入的压缩过程中花费的--而不是对其进行加密。试试-z 0,这样随机数据的压缩就不会花费那么多时间了:

代码语言:javascript
复制
maartenb@maartens-ryzen:~/Test$ time gpg --symmetric --batch --passphrase 123 --output blob.gpg -z 0 blob
gpg: AES256 encrypted data
gpg: encrypted with 1 passphrase
gpg: handle plaintext failed: General error

real    0m0.686s
user    0m0.670s
sys     0m0.016s
maartenb@maartens-ryzen:~/Test rm blob
maartenb@maartens-ryzen:~/Test#qcStackCode# time gpg --decrypt --batch --passphrase 123 --output blob blob.gpg
gpg: AES256 encrypted data
gpg: encrypted with 1 passphrase

real    0m1.056s
user    0m0.965s
sys     0m0.088s

似乎您使用基于密码的加密来进行“对称加密”,而使用不受保护的私钥进行加密/解密(因为密码是缓存的)。

对于基于密码的加密,您可以使用基于密码的密钥派生函数或PBKDF,它具有显式工作因子(或迭代计数)来减缓密码猜测速度。更多信息,这里

现在,如果您查看加密的数据包,您会得到以下信息:

代码语言:javascript
复制
maartenb@maartens-ryzen:~/Test$ gpg --list-packets blob.gpg 
gpg: AES256 encrypted data
gpg: encrypted with 1 passphrase
gpg: decryption failed: Bad session key
# off=0 ctb=8c tag=3 hlen=2 plen=13
:symkey enc packet: version 4, cipher 9, s2k 3, hash 2
    salt 4D975A3A5174CD4F, count 65011712 (255)
# off=15 ctb=d2 tag=18 hlen=6 plen=104857656 new-ctb
:encrypted data packet:
    length: 104857656
    mdc_method: 2

请注意s2k 3和其中的count值很高。注意,我使用的是gpg (GnuPG) 2.2.12

公钥/私钥操作不会有这样的慢速--除非私钥仍然受到密码的保护。

这是公钥加密的另一个优点:在加密期间,您将不会有任何速度来保护来自低熵输出源(即,您)采样的传递短语。

票数 2
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/79608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档