I wrote a basic function to test the speed of the AES-256-CBC mode of the Node.js built-in crypto functions. These functions use OpenSSL, so they should support AES-NI, but when I correctly enable AES-NI and do a command-line test of OpenSSL the encryption speed is ~350MB/s on OpenSSL and only ~100MB/s on Node.js Crypto.
I used this answer to enable OpenSSL AES-NI in the command line and ran it as follows:
openssl speed -evp aes-256-cbc
My question is, how do I make the speed of the Node.js crypto functions for AES match that of OpenSSL run in the command line? I suspect the reason is failure to use AES-NI
Check if AES-NI is Available on CPU Processors Before proceeding, first verify that current CPUs have the AES instruction set. For this you can inspect CPU flags as follows. If the output shows aes , that means AES-NI engine is available on current CPUs.
The Intel Advanced Encryption Standard (AES) or New Instructions (AES-NI) engine enables high-speed hardware encryption and decryption for OpenSSL, ssh, VPN, Linux/Unix/OSX full disk encryption and more.
It seems that this was not correctly enabled until the latest release v0.12 (that was just released publicly).
Some of the notes are available here http://strongloop.com/strongblog/performance-node-js-v-0-12-whats-new/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With