如何在Linux上为Node.js加密库启用AES-NI(硬件加速)?

8
我编写了一个基本的函数来测试Node.js内置加密函数的AES-256-CBC模式速度。这些函数使用OpenSSL,因此应该支持AES-NI,但是当我正确启用AES-NI并在命令行上测试OpenSSL的加密速度时,加密速度为~350MB/s,而Node.js Crypto的速度仅为~100MB/s。
我使用了这个答案来在命令行中启用OpenSSL AES-NI,并按以下方式运行:
`openssl speed -evp aes-256-cbc`
我的问题是,如何使Node.js Crypto函数的AES速度与在命令行中运行的OpenSSL相匹配?我怀疑原因是未能使用AES-NI。

1
你是编译了Node还是使用二进制文件? - user568109
编译版本为 0.10.20。 - Philberg
4
如果您正在使用最新的openssl,您不需要做任何事情。这种优化是通过使用-mtune/-maes选项在编译openssl时完成的。请参见http://security.stackexchange.com/questions/11815/where-can-i-find-information-about-how-to-implement-intel-embedded-aes256-encryp。现在我不知道是否使用了这些选项。我所知道的是,它是通过node-gyp编译的,请参见https://github.com/joyent/node/blob/master/deps/openssl/openssl.gyp。 - user568109
350MB/s对于基于AES-NI的AES来说相当低,我本来期望大约是这个数字的两倍。我想知道这是否是由于CBC加密是顺序的原因。你的数字在CBC解密或CTR方面是否有所不同? - CodesInChaos
2个回答

3

2
不,你做得对。在Node中使用OpenSSL的性能有点令人失望。大多数生产环境下的Node.js部署会在其他地方终止SSL连接,然后将未加密的连接转发到Node.js。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接