¿Cómo uso el Cifrado de Skein's Stream?

6

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. :-)

    
pregunta Stefano Palazzo 13.07.2011 - 16:30
fuente

2 respuestas

8

No debe implementar software basado en Skein todavía.

Internamente, Skein se basa en un cifrado de bloque personalizado (Threefish) que se puede usar como un cifrado de flujo o un MAC, pero nadie está mirando la seguridad inherente de Threefish, solo como la forma en que proporciona una buena función hash. , e incluso para ese uso, el veredicto aún no se ha alcanzado. Se requieren años de escrutinio para decidir que un algoritmo dado "se vea decentemente seguro". Una primitiva de talla única tiene un gran atractivo, especialmente para sistemas integrados con espacio limitado para código, pero pasarán algunos años más antes de que uno pueda considerar oficialmente a Threefish como seguro. En términos generales, si Skein es elegido como SHA-3 (para finales de 2012), entonces es probable que Threefish comience a ser investigado como una primitiva de encriptación, en en cuyo caso podría ser declarado como "parece bueno" para, por ejemplo, 2016. Tendrá que ser paciente.

Otra razón por la que debes esperar un poco es que Skein y / o Threefish pueden estar sujetos a modificaciones. A intervalos regulares, los candidatos SHA-3 pueden ser "ajustados" (modificaciones ligeras diseñadas a la luz del análisis previo). Skein fue ajustado para la segunda ronda de la competencia SHA-3, y luego fue ajustado nuevamente para la tercera ronda. ¿Qué versión se implementa en pyskein? Aquí hay espacio para las pesadillas de interoperabilidad.

En cuanto a tus otras preguntas:

  • Skein / Threefish no incorpora ningún estiramiento automático de las llaves.
  • Skein como un cifrado de flujo es un cifrado de flujo, no un cifrado de flujo autenticado . Solo hace cifrado. Skein puede también usarse para calcular la autenticación (como un MAC) pero puede haber problemas a tener en cuenta si desea usar la misma clave para ambos usos (es decir, no lo haga a menos que esté seguro que es seguro, y francamente no estoy seguro).
  • El "nonce" debe ser una cadena arbitraria, no de longitud realmente limitada. En la descripción general de Skein, el nonce y el mensaje a hash (cuando hash) utilizan los mismos mecanismos de entrada. Skein como un cifrado de flujo es "solo" una función hash con una clave, sin entrada, pero con una salida muy larga.

Por supuesto, pyskein puede agregar limitaciones arbitrarias, por lo que le remito a la documentación de pyskein, si existe.

    
respondido por el Thomas Pornin 13.07.2011 - 17:36
fuente
4

Estoy completamente de acuerdo con @Thomas. No deberías usar Skein en este punto.

En su lugar, le sugiero que utilice el cifrado AES-CBC o AES-CTR, junto con el código de autenticación del mensaje CMAC, en el modo de cifrar y luego autenticar.

    
respondido por el D.W. 15.07.2011 - 08:20
fuente

Lea otras preguntas en las etiquetas