Diverse prestazioni di velocità openssl sullo stesso hardware con AES 256 (EVP e API non EVP)

24

Se eseguo openssl 1.0.1e in questo modo:

$ ./openssl speed aes-256-cbc (i.e without EVP API)
Doing aes-256 cbc for 3s on 16 size blocks: 14388425 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 64 size blocks: 3861764 aes-256 cbc's in 2.99s
Doing aes-256 cbc for 3s on 256 size blocks: 976359 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 1024 size blocks: 246145 aes-256 cbc's in 2.99s
Doing aes-256 cbc for 3s on 8192 size blocks: 30766 aes-256 cbc's in 3.00s

Tuttavia, se lo eseguo in questo modo:

$ ./openssl speed -evp AES256
Doing aes-256-cbc for 3s on 16 size blocks: 71299827 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 64 size blocks: 18742055 aes-256-cbc's in 2.99s
Doing aes-256-cbc for 3s on 256 size blocks: 4771917 aes-256-cbc's in 2.99s
Doing aes-256-cbc for 3s on 1024 size blocks: 1199158 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 8192 size blocks: 150768 aes-256-cbc's in 2.99s

Dalla documentazione OpenSSL , sembra che l'uso di EVP per lo stesso codice o non l'uso di EVP dovrebbe non fare alcuna differenza Sì, lo vedo costantemente. Qualcuno può fornire un'informazione? Ho cercato su Google molto ma non ho trovato nulla. Guarderò attraverso il codice ma non sono sicuro di poter capire quella parte.

    
posta Ramana 29.04.2013 - 15:19
fonte

2 risposte

29

Nel codice sorgente OpenSSL, la funzione speed aes-256-cbc chiama AES_cbc_encrypt() che a sua volta usa AES_encrypt() , una funzione da crypto/aes/aes_x86core.c . È un'evidente implementazione "classica" con le tabelle.

D'altra parte, con EVP, si finisce nel codice in crypto/evp/e_aes.c che rileva dinamicamente se la CPU corrente supporta Istruzioni AES-NI , una funzionalità dei recenti processori x86, che consentono prestazioni notevolmente migliorate. Nel codice OpenSSL, la macro AESNI_CAPABLE fa il lavoro (si alimenta con alcuni flag che vengono impostati quando la libreria viene inizializzata, usando CPUID ).

Bottom-line: con EVP, puoi beneficiare della selezione automatica dell'implementazione migliorata, basata sul modello attuale della CPU, mentre il codice non-EVP utilizza direttamente l'implementazione software generica, che funziona ovunque, ma è più lento.

    
risposta data 29.04.2013 - 16:43
fonte
3

Un'altra cosa da notare:

$ ./openssl speed aes-256-cbc (i.e without EVP API)
Doing aes-256 cbc for 3s on 16 size blocks: 14388425 aes-256 cbc's in 3.00s
$ ./openssl speed -evp AES256
Doing aes-256-cbc for 3s on 16 size blocks: 71299827 aes-256-cbc's in 3.00s

Senza l'API EVP, in 3.00s, elaborato 14.388.425 (~ 14M)
Con l'API EVP, in 3.00s, elaborato 71.299.827 (~ 71M)

È ovviamente elaborato più velocemente in modalità EVP.

    
risposta data 02.11.2015 - 04:05
fonte

Leggi altre domande sui tag