
pure-python firma/verificación ECDSA y acuerdo de claves ECDH
Esta es una implementación fácil de usar de ECC (Criptografía de Curva Elíptica) con soporte para ECDSA (Algoritmo de Firma Digital de Curva Elíptica), EdDSA (Algoritmo de Firma Digital de Curva Edwards) y ECDH (Diffie-Hellman de Curva Elíptica), implementada puramente en Python, publicada bajo la licencia MIT. Con esta biblioteca, puede crear rápidamente pares de claves (clave de firma y clave de verificación), firmar mensajes y verificar las firmas. También puede acordar una clave secreta compartida basada en claves públicas intercambiadas. Las claves y las firmas son muy cortas, lo que facilita su manejo e incorporación en otros protocolos.
NOTA: Esta biblioteca no debería utilizarse en entornos de producción; consulte Seguridad para más detalles.
Esta biblioteca proporciona generación de claves, firma, verificación y derivación
de secreto compartido para cinco
curvas NIST "Suite B" GF(p) (campo primo) populares, con longitudes de clave de 192,
224, 256, 384 y 521 bits. Los "nombres cortos" de estas curvas, conocidos por
la herramienta OpenSSL (openssl ecparam -list_curves), son: prime192v1,
secp224r1, prime256v1, secp384r1 y secp521r1. Incluye la
curva de 256 bits secp256k1 utilizada por Bitcoin. También hay soporte para las
variantes normales (no retorcidas) de las curvas Brainpool de 160 a 512 bits. Los
"nombres cortos" de estas curvas son: brainpoolP160r1, brainpoolP192r1,
brainpoolP224r1, brainpoolP256r1, brainpoolP320r1, brainpoolP384r1,
brainpoolP512r1. También se incluyen algunas de las curvas pequeñas del estándar SEC
(principalmente para acelerar las pruebas de la biblioteca), que son:
secp112r1, secp112r2, secp128r1 y secp160r1.
La generación de claves, la firma y la verificación también son compatibles con las curvas Ed25519 y
Ed448.
No se incluyen otras curvas, pero no es demasiado difícil añadir soporte para más
curvas sobre campos primos.
Esta biblioteca utiliza solo Python y el paquete 'six'. Es compatible con Python 2.6, 2.7 y 3.6+. También admite la ejecución en implementaciones alternativas como pypy y pypy3.
Si gmpy2 o gmpy están instalados, se utilizarán para una aritmética más rápida.
Cualquiera de ellos puede instalarse después de que esta biblioteca esté instalada;
python-ecdsa detectará su presencia al inicio y los utilizará
automáticamente.
Debería preferir gmpy2 en Python3 para un rendimiento óptimo.
Para ejecutar las pruebas de compatibilidad con OpenSSL, la herramienta 'openssl' debe estar en su
PATH. Esta versión se ha probado con éxito contra OpenSSL 0.9.8o,
1.0.0a, 1.0.2f, 1.1.1d y 3.0.1 (entre otros).
Esta biblioteca está disponible en PyPI; se recomienda instalarla con pip:```
pip install ecdsa
En caso de que se quiera un mayor rendimiento y el uso de código nativo no sea un problema, es posible especificar la instalación junto con `gmpy2`:```
pip install ecdsa[gmpy2]
o (opción más lenta, heredada):``` pip install ecdsa[gmpy]
## Velocidad
La siguiente tabla muestra cuánto tarda esta librería en generar pares de claves (`keygen`), en firmar datos (`sign`), en verificar esas firmas (`verify`), en derivar un secreto compartido (`ecdh`) y en verificar las firmas sin precomputación específica de clave (`no PC verify`). Todos esos valores están en segundos. Por conveniencia, también se proporcionan los inversos de esos valores: cuántas claves por segundo se pueden generar (`keygen/s`), cuántas firmas se pueden realizar por segundo (`sign/s`), cuántas firmas se pueden verificar por segundo (`verify/s`), cuántos secretos compartidos se pueden derivar por segundo (`ecdh/s`) y cuántas firmas sin precomputación específica de clave se pueden verificar por segundo (`no PC verify/s`). El tamaño de la firma bruta (generalmente la forma más pequeña en que se puede codificar una firma) también se proporciona en la columna `siglen`. Usa `tox -e speed` para generar esta tabla en tu propio equipo. En un Intel Core i7 4790K @ 4.0GHz obtengo el siguiente rendimiento:```
siglen keygen keygen/s sign sign/s verify verify/s no PC verify no PC verify/s
NIST192p: 48 0.00032s 3134.06 0.00033s 2985.53 0.00063s 1598.36 0.00129s 774.43
NIST224p: 56 0.00040s 2469.24 0.00042s 2367.88 0.00081s 1233.41 0.00170s 586.66
NIST256p: 64 0.00051s 1952.73 0.00054s 1867.80 0.00098s 1021.86 0.00212s 471.27
NIST384p: 96 0.00107s 935.92 0.00111s 904.23 0.00203s 491.77 0.00446s 224.00
NIST521p: 132 0.00210s 475.52 0.00215s 464.16 0.00398s 251.28 0.00874s 114.39
SECP256k1: 64 0.00052s 1921.54 0.00054s 1847.49 0.00105s 948.68 0.00210s 477.01
BRAINPOOLP160r1: 40 0.00025s 4003.88 0.00026s 3845.12 0.00053s 1893.93 0.00105s 949.92
BRAINPOOLP192r1: 48 0.00033s 3043.97 0.00034s 2975.98 0.00063s 1581.50 0.00135s 742.29
BRAINPOOLP224r1: 56 0.00041s 2436.44 0.00043s 2315.51 0.00078s 1278.49 0.00180s 556.16
BRAINPOOLP256r1: 64 0.00053s 1892.49 0.00054s 1846.24 0.00114s 875.64 0.00229s 437.25
BRAINPOOLP320r1: 80 0.00073s 1361.26 0.00076s 1309.25 0.00143s 699.29 0.00322s 310.49
BRAINPOOLP384r1: 96 0.00107s 931.29 0.00111s 901.80 0.00230s 434.19 0.00476s 210.20
BRAINPOOLP512r1: 128 0.00207s 483.41 0.00212s 471.42 0.00425s 235.43 0.00912s 109.61
SECP112r1: 28 0.00015s 6672.53 0.00016s 6440.34 0.00031s 3265.41 0.00056s 1774.20
SECP112r2: 28 0.00015s 6697.11 0.00015s 6479.98 0.00028s 3524.72 0.00058s 1716.16
SECP128r1: 32 0.00018s 5497.65 0.00019s 5272.89 0.00036s 2747.39 0.00072s 1396.16
SECP160r1: 42 0.00025s 3949.32 0.00026s 3894.45 0.00046s 2153.85 0.00102s 985.07
Ed25519: 64 0.00076s 1324.48 0.00042s 2405.01 0.00109s 918.05 0.00344s 290.50
Ed448: 114 0.00176s 569.53 0.00115s 870.94 0.00282s 355.04 0.01024s 97.69