I have a laptop without the AES-NI CPU instructions but with SSE4.1.
I'm using Linux and tried the (in-memory) cryptsetup benchmark to get the rough tendency which returned:
# Algorithm | Key | Encryption | Decryption
aes-cbc 128b 101,4 MiB/s 159,6 MiB/s
serpent-cbc 128b 52,7 MiB/s 203,4 MiB/s
twofish-cbc 128b 126,4 MiB/s 176,1 MiB/s
aes-cbc 256b 107,8 MiB/s 120,4 MiB/s
serpent-cbc 256b 52,9 MiB/s 203,3 MiB/s
twofish-cbc 256b 135,2 MiB/s 177,0 MiB/s
aes-xts 256b 160,6 MiB/s 160,2 MiB/s
serpent-xts 256b 181,2 MiB/s 188,6 MiB/s
twofish-xts 256b 164,4 MiB/s 166,2 MiB/s
aes-xts 512b 121,4 MiB/s 121,0 MiB/s
serpent-xts 512b 181,4 MiB/s 188,6 MiB/s
twofish-xts 512b 164,7 MiB/s 165,4 MiB/s
I'm very surprised:
- AES has fewer rounds than Serpent so AES should be faster.
- AES usage is much higher than Serpent so one could expect the Linux AES crypto module to be much more optimized than Serpent's.
- There is no speed decrease with bigger key size in Serpent while there is in AES.
- The tests I made 1 year ago on the same computer gave the same speed for AES but all Serpent entries were averaging at 50 MiB/s.
- To my knowledge, there has been no huge enhancement of Serpent kernel module in the past year.
Would you trust this "benchmark"? If not, how would you explain the great results for Serpent?