1

我开发了一个应用程序来加密/解密文件。用户可以从 3 种不同的算法中进行选择,即 AES 或 Blowfish 或 PBE。然后显示加密、解密和总时间。我正在尝试比较“时间”元素的 3 种算法的效率。我的大学教授告诉我研究这 3 种算法的时间复杂度。除了计算时间复杂度之外,还有哪些其他方法可以确定算法效率和速度?是否有任何特定的资源可以让我开始学习并实现我的目标?我的目标是得出一个结论,为什么对于特定文件格式,一种特定类型的算法比另一种算法运行得更快(例如,对于 pdf 文件,aes 可能比 mp3 文件更快)

[我的一个朋友建议我在各种处理器上运行应用程序,并尝试确定处理器类型与应用程序性能之间是否存在任何关系。他是对的吗?] - 谢谢。

4

3 回答 3

2

正如其他人已经指出的那样,加密算法的时间复杂度始终与输入大小呈线性关系。它显然不能更快,超线性复杂性是不切实际的。我也不知道速度取决于输入类型的密码。无论您加密一个 10 MB PDF 文件还是一个 10 MB MP3 文件,都不会产生影响。

因此,速度差异仅归结为密码的具体实现在具体硬件架构上的速度。流行的 OpenSSL 库有一个内置的基准测试工具,可以显示它们的特定实现有多快。下面是在运行 32 位 Ubuntu(PBE 不是密码)的 Intel Atom 处理器上比较 AES-256 和 Blowfish 的示例:

$ openssl speed aes-256-cbc bf-cbc
Doing aes-256 cbc for 3s on 16 size blocks: 2156930 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 64 size blocks: 563323 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 256 size blocks: 142873 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 1024 size blocks: 35857 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 8192 size blocks: 4487 aes-256 cbc's in 3.00s
Doing blowfish cbc for 3s on 16 size blocks: 10063235 blowfish cbc's in 3.00s
Doing blowfish cbc for 3s on 64 size blocks: 2759400 blowfish cbc's in 3.00s
Doing blowfish cbc for 3s on 256 size blocks: 705523 blowfish cbc's in 3.00s
Doing blowfish cbc for 3s on 1024 size blocks: 177777 blowfish cbc's in 3.00s
Doing blowfish cbc for 3s on 8192 size blocks: 22266 blowfish cbc's in 3.00s
OpenSSL 1.0.1c 10 May 2012
built on: Tue Mar 19 19:10:21 UTC 2013
options:bn(64,32) rc4(8x,mmx) des(ptr,risc1,16,long) aes(partial) blowfish(idx)
compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DOPENSSL_NO_TLS1_2_CLIENT -DOPENSSL_MAX_TLS1_2_CIPHER_LENGTH=50 -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
blowfish cbc     53670.59k    58867.20k    60204.63k    60681.22k    60801.02k
aes-256 cbc      11503.63k    12017.56k    12191.83k    12239.19k    12252.50k

您可以看到,在使用该特定实现的特定机器上,Blowfish 比 AES-256 快得多。但这只是一个数据点。

要回答为什么一种密码比另一种更快的问题,您必须研究算法的细节以及不同硬件平台的性能特征。另请注意,最快的实现通常是用汇编语言编写的,以实现最高性能。

于 2013-03-28T11:52:42.787 回答
1

对于上述三种对称加密算法,通常有一个恒定的时间用于启动算法,而一个可变的时间取决于您加密的数据量。一种算法启动速度可能很慢,但在启动时加密速度很快,而其他算法启动速度可能很快,但在大数据时速度很慢。

因此,为您的目的选择最快的算法取决于您需要加密/解密的数据量以及它对这些数据量的执行情况。

除此之外,您还应该考虑每种算法的加密强度。如果它的安全性不足以满足您的安全要求,那么选择最快的算法将无济于事。

于 2013-03-28T09:49:46.833 回答
0

除了计算时间复杂度之外,还有哪些其他方法可以确定算法效率和速度?

除了对每个的实际实现进行基准测试/分析之外,这几乎是要走的路。我觉得还有更多你还没有问过的问题。

于 2013-03-28T09:34:02.530 回答