我知道对称比非对称更快。
我想测试这个,但是我的测试(显然不正确)显示了相反的情况。
对称试验:
#!/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生成):
#!/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结果:
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有人能发现我的错误吗?
发布于 2020-04-01 15:13:16
现在100 MiB已经不算什么了。不过,大多数时间可能是由于I/O操作而不是加密/解密而花费的。一旦在RAM中缓冲了文件,操作就会进行得更快。更糟糕的是,在加密期间,大部分时间都是在输入的压缩过程中花费的--而不是对其进行加密。试试-z 0,这样随机数据的压缩就不会花费那么多时间了:
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,它具有显式工作因子(或迭代计数)来减缓密码猜测速度。更多信息,这里。
现在,如果您查看加密的数据包,您会得到以下信息:
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。
公钥/私钥操作不会有这样的慢速--除非私钥仍然受到密码的保护。
这是公钥加密的另一个优点:在加密期间,您将不会有任何速度来保护来自低熵输出源(即,您)采样的传递短语。
https://crypto.stackexchange.com/questions/79608
复制相似问题