¿Qué son buenas pruebas para comparar una biblioteca de cifrado?
Las respuestas a continuación se encuentran en el contexto de Crypto ++. Ahora no me refiero a otras bibliotecas, como OpenSSL, Botan, BouncyCastle, etc.
La biblioteca Crypto ++ tiene una suite de benchmarking incorporada.
Cual unidad (tiempo, los ciclos de CPU ...) debemos utilizar para comparar los differents bibliotecas criptográficas?
Por lo general, mide el rendimiento en ciclos por byte. Los ciclos por byte dependen de la frecuencia de la CPU. Otra métrica relacionada es el rendimiento medido en MB/s. También depende de la frecuencia de la CPU.
¿Hay herramientas, procedimientos ....?
git clone https://github.com/weidai11/cryptopp.git
cd cryptopp
make static cryptest.exe
# 2.0 GHz (use KB=1024; not 1000)
make bench CRYPTOPP_CPU_SPEED=1.8626
make bench
creará un archivo llamado benchmark.html
.
Si desea ejecutar manualmente las pruebas, entonces:
./cryptest.exe b <time in seconds> <cpu speed in GHz>
Se dará salida a una tabla HTML-como sin <HEAD>
y <BODY>
etiquetas. Aún podrá verlo en un navegador web.
También puede consultar la página de referencia de Crypto ++ en Crypto++ Benchmarks. La información está fechada, y está en nuestra lista de TODO.
También necesita un presupuesto para lo que parece correcto. Por ejemplo, SSE4.2 y ARMv8 tienen una instrucción CRC32. Los ciclos por byte deben ir de aproximadamente 3 o 5 cpb (solo software) a aproximadamente 1 o 1.5 cpb (aceleración de hardware). Debería equivaler a un cambio de aproximadamente 300 o 500 MB/s (solo software) a aproximadamente 1.5 GB/s (aceleración de hardware) en hardware moderno que corre alrededor de 2 GHz.
Otras tecnologías, como SSE2 y NEON, son más difíciles de trabajar. Hay ciclos teóricos por byte y rendimiento que debería ver, pero es posible que no sepa de qué se trata. Es posible que deba ponerse en contacto con los autores del algoritmo para averiguarlo. Por ejemplo, nos pusimos en contacto con los autores de BLAKE2 para saber si nuestra implementación ARMv7/ARMv8 NEON funcionaba como se esperaba porque era missing benchmark results en la página principal del autor.
También he encontrado que GCC 4.6 (y superior) y -O3
pueden hacer una gran diferencia en las implementaciones de solo software. Esto se debe a que GCC se vectoriza fuertemente en -O3
, y es posible que observe una aceleración de 2x a 2.5x. Por ejemplo, el compilador puede generar código que se ejecuta a 40 cpb en -O2
. En -O3
puede funcionar a 15 o 19 cpb. Una buena implementación de SSE2 o NEON debe superar la implementación solo de software en al menos unos ciclos por byte. En el mismo ejemplo, la implementación de SSE2 o NEON puede ejecutarse entre 8 y 13 cpb.
También hay sitios como OpenBenchmarking.org que quizás puedan proporcionarle algunas métricas.
Va a depender de la biblioteca y los esquemas de encriptación disponibles, y de las opciones de plataforma que tiene disponibles para usted. Por ejemplo: ¿Está probando la clave simétrica o el cifrado de clave asimétrica? ¿Estás probando el cifrado o solo la generación de firma digital? ¿La fortaleza de la clave o el rendimiento bruto son más importantes para usted? –