J'ai réalisés des tests, sur un PC peu performant sans capacité matérielle AES :
Intel NUC DN2820FYKH acheté en 2015
CPU Intel Celeron N2820 @2.13 GHz (cpu 2 cœurs, il n'a pas le jeu d'instructions AES)
RAM 4 Go DDR3
SSD 256 Go Crucial MX100 SATA
Voici la commande lscpu :
Architecture : x86_64
Mode(s) opératoire(s) des processeurs : 32-bit, 64-bit
Boutisme : Little Endian
Address sizes: 36 bits physical, 48 bits virtual
Processeur(s) : 2
Liste de processeur(s) en ligne : 0,1
Thread(s) par cœur : 1
Cœur(s) par socket : 2
Socket(s) : 1
Nœud(s) NUMA : 1
Identifiant constructeur : GenuineIntel
Famille de processeur : 6
Modèle : 55
Nom de modèle : Intel(R) Celeron(R) CPU N2820 @ 2.13GHz
Révision : 3
Vitesse du processeur en MHz : 1046.134
Vitesse maximale du processeur en MHz : 2399,3999
Vitesse minimale du processeur en MHz : 533,2000
BogoMIPS : 4266.66
Virtualisation : VT-x
Cache L1d : 48 KiB
Cache L1i : 64 KiB
Cache L2 : 1 MiB
Nœud NUMA 0 de processeur(s) : 0,1
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Vulnerable: Clear CPU buffers attempted, no microcode; SMT disabled
Vulnerability Meltdown: Mitigation; PTI
Vulnerability Spec store bypass: Not affected
Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2: Mitigation; Full generic retpoline, IBPB conditional, IBRS_FW, STIBP disabled, RSB filling
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected
Drapaux : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 movbe popcnt tsc_deadline_timer rdrand lahf_lm 3dnowprefetch epb pti ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid tsc_adjust smep erms dtherm ida arat
J'ai testé ce PC avec plusieurs système d’exploitation Ubuntu 64bits :
- Ubuntu 18.04.5 / Noyau HWE 5.4.0-74-generic / OpenSSL: OpenSSL 1.1.1 / Gnome 3.28.2
- Ubuntu 20.04.2 / Noyau GA 5.4.0-74-generic / OpenSSL: OpenSSL 1.1.1f / Pas d'interface graphique (tests réalisés par connexion ssh)
- Ubuntu 20.04.2 / Noyau HWE 5.8.0-55-generic / OpenSSL: OpenSSL 1.1.1f / Pas d'interface graphique (tests réalisés par connexion ssh)
- Ubuntu 21.04 / Noyau 5.11.0-18-generic / OpenSSL: OpenSSL 1.1.1j / Gnome 3.38.5
Pour une partie des tests, les résultats sont identiques quel que soit la configuration :
- aes-128-cbc mono-thread : openssl speed -elapsed -evp aes-128-cbc : Même résultats pour les 4 configurations soit 48,9 Mo/s
- aes-128-cbc multi-threads : openssl speed -multi $(nproc) -elapsed -evp aes-128-cbc : Même résultats pour les 4 configurations soit 97,8 Mo/s
- aes-256-cbc mono-thread : openssl speed -elapsed -evp aes-256-cbc : Même résultats pour les 4 configurations soit 34,7 Mo/s
- aes-256-cbc multi-threads : openssl speed -multi $(nproc) -elapsed -evp aes-256-cbc : Même résultats pour les 4 configurations soit 69,3 Mo/s
- chacha20-poly1305 mono-thread : openssl speed -elapsed -evp chacha20-poly1305 : Même résultats pour les 4 configurations soit 243,1 Mo/s
- chacha20-poly1305 multi-threads : openssl speed -multi $(nproc) -elapsed -evp chacha20-poly1305 : Même résultats pour les 4 configurations soit 486,5 Mo/s
- signatures/sec et vérifications/sec mono-thread : openssl speed rsa4096 : Même résultats pour les 4 configurations soit 28,4 signatures par secondes et 1875 vérifications/sec
- signatures/sec et vérifications/sec multi-threads : openssl speed -multi $(nproc) rsa4096 : Même résultats pour les 4 configurations soit 56,9 signatures par secondes et 3750 vérifications/sec
Mais pour AES-GCM, les résultats se dégradent significativement avec Ubuntu 20.04 et 21.04, comparé à Ubuntu 18.04 : (pour rappel, le CPU, il n'a pas le jeu d'instructions AES, c'est donc fait en soft)
aes-128-gcm mono-thread : openssl speed -elapsed -evp aes-128-gcm
- Ubuntu 18.04 / Noyau 5.4 / OpenSSL 1.1.1 : 149,0 Mo/s
- Ubuntu 20.04 / Noyau 5.4 / OpenSSL 1.1.1f : 45,4 Mo/s
- Ubuntu 20.04 / Noyau 5.8 / OpenSSL 1.1.1f : 45,4 Mo/s
- Ubuntu 21.04 / Noyau 5.11 / OpenSSL 1.1.1j : 45,4 Mo/s
aes-128-gcm multi-threads : openssl speed -multi $(nproc) -elapsed -evp aes-128-gcm
- Ubuntu 18.04 / Noyau 5.4 / OpenSSL 1.1.1 : 296,3 Mo/s
- Ubuntu 20.04 / Noyau 5.4 / OpenSSL 1.1.1f : 90,8 Mo/s
- Ubuntu 20.04 / Noyau 5.8 / OpenSSL 1.1.1f : 90,7 Mo/s
- Ubuntu 21.04 / Noyau 5.11 / OpenSSL 1.1.1j : 90,1 Mo/s
aes-256-gcm mono-thread : openssl speed -elapsed -evp aes-256-gcm
- Ubuntu 18.04 / Noyau 5.4 / OpenSSL 1.1.1 : 114,3 Mo/s
- Ubuntu 20.04 / Noyau 5.4 / OpenSSL 1.1.1f : 33,2 Mo/s
- Ubuntu 20.04 / Noyau 5.8 / OpenSSL 1.1.1f : 33,1 Mo/s
- Ubuntu 21.04 / Noyau 5.11 / OpenSSL 1.1.1j : 33,1 Mo/s
aes-256-gcm multi-threads : openssl speed -multi $(nproc) -elapsed -evp aes-256-gcm
- Ubuntu 18.04 / Noyau 5.4 / OpenSSL 1.1.1 : 227,2 Mo/s
- Ubuntu 20.04 / Noyau 5.4 / OpenSSL 1.1.1f : 66,3 Mo/s
- Ubuntu 20.04 / Noyau 5.8 / OpenSSL 1.1.1f : 66,3 Mo/s
- Ubuntu 21.04 / Noyau 5.11 / OpenSSL 1.1.1j : 65,7 Mo/s
Je ne comprends pas pourquoi cette différence pour aes-128-gcm et aes-256-gcm entre Ubuntu 18.04 et Ubuntu 20.04 avec le même noyau 5.4