Entiendo que el candidato de la competencia de función hash de NIST Skein viene con un cifrado de bloque integrado, Threefish, que se convierte en un cifrado de flujo mediante el uso del encadenamiento Iteración de bloque única (¿está bien?).
La implementación de pyskein hace que esta en particular sea fácil de usar :
import os
import skein
data = b'Hello World!'
key = b'thisisasecret'
nonce = os.urandom(32)
c1 = skein.StreamCipher(key, nonce=nonce, hasher=skein.skein1024)
c2 = skein.StreamCipher(key, nonce=nonce, hasher=skein.skein1024)
print(c2.decrypt(c1.encrypt(data)))
Pero, como el algoritmo es relativamente nuevo, tengo una gran cantidad de preguntas que culminan en "¿Cómo lo uso correctamente?"
- ¿Cuánto tiempo debe durar el nonce?
- ¿Sigo necesitando usar PBKDF2? (es decir, ¿esta cosa hace que alguna tecla se extienda por sí misma?)
- ¿Todavía tengo que autenticar el mensaje?
- ¿Qué sucede si no le doy un nonce?
- ¿Cómo uso todos los argumentos opcionales?
- ¿Por qué debería / no debería usarlo?
No soy criptógrafo, y no parece haber documentación fácil de entender sobre la parte de Threefish de Skein. Sin embargo, el algoritmo parece muy bueno. Así que espero que puedas ayudarme. :-)