Tras un breve vistazo al módulo, está utilizando un HMAC junto con SHA-1 (o SHA -512 en versiones más nuevas). Este es el mismo algoritmo que se usa en TLS para detectar la manipulación de datos.
Pero un HMAC se puede calcular rápidamente. Los principales costos en el HMAC son el cálculo de hash (es decir, SHA-1 en su caso) que se necesita dos veces. Esto significa que si tienes un secreto débil es posible un ataque de fuerza bruta. Y, mientras Signer parece ofrecer el uso de una función de derivación de claves para "endurecer" la clave, las funciones ofrecidas son solo un hash simple o un HMAC (es decir, dos hashes), que en realidad no frenan un ataque de fuerza bruta.
Esto significa que la seguridad de este enfoque reside en elegir una buena clave secreta, es decir, una cadena aleatoria larga en lugar de una contraseña corta comparable. Desafortunadamente, la documentación no muestra realmente qué claves son seguras y solo hace algunas recomendaciones similares a las recomendaciones de contraseña:
Dada una clave que solo tú conoces ... Entonces, si mantienes la clave en secreto y compleja, estarás bien.
Pero a partir de recomendaciones de contraseña similares, todos sabemos cuán seguras serán esas claves al final. Lo que realmente debería usar está oculto en el código fuente en la documentación de derive_key
:
def derive_key (self):
...
Tenga en cuenta que la derivación clave en su peligro no es intencionada
para ser utilizado como un método de seguridad para hacer una clave compleja de un corto
contraseña. En su lugar, debes usar grandes claves secretas aleatorias .
Lo siguiente crearía un secreto con 128 bits aleatorios que es lo suficientemente seguro contra ataques de fuerza bruta:
import os
secret_key = os.urandom(16)