Rodando su propio cripto [cerrado]

1

Sé que esto suele ser mal visto, pero suponiendo que tuvieras que pasar tu propio cifrado de cifrado (completamente solo o con un pequeño grupo de amigos, sin posibilidad de revisión por pares), ¿qué podrías hacer para hacer tu algoritmo personalizado? ¿Lo más seguro posible (o más bien, para mantener el peligro de usarlo al mínimo)? De manera similar, ¿qué harías por algo como una función hash para hacer que la probabilidad de que tenga una colisión trivial o un ataque de preimagen sea lo más bajo posible?

Entiendo que no habría manera de abordar la seguridad de algoritmos como AES, y no tengo planes de usar algoritmos personalizados para nada importante, pero pensé que sería informativo pensar en cuáles serían las mejores prácticas para rodando tu propio criptosistema si tuvieras que hacerlo.

    
pregunta DEP 02.05.2018 - 17:17
fuente

3 respuestas

5

Respuesta revisada

En general, es posible que desee comenzar basando su cifrado (mayormente relevante para los cifrados asimétricos) en un problema difícil conocido. Es posible que desee hacer pruebas matemáticas para verificar que su cifrado tenga las propiedades deseadas y, de hecho, descifrarlo requiere resolver el difícil problema conocido. El tipo de problemas a elegir se explicó más detalladamente en Crypto SE . Al crear estas pruebas matemáticas, se asegurará de que su cifrado no sea fácil de romper directamente.

El siguiente paso puede ser mirar los canales laterales. Más notablemente los ataques de tiempo. Si su cifrado toma una cantidad de tiempo diferente para diferentes entradas y claves, es posible que desee al menos agregar un código para que tome la misma cantidad de tiempo siempre o simplemente agregar una cantidad aleatoria de tiempo mediante la espera activa.

Hay muchos otros canales laterales y consideraciones que un cifrado ampliamente usado tiene que tener en cuenta, pero esto debería comenzar. Por supuesto, hacer todas estas pruebas matemáticas es muy difícil e incluso así, no le da ninguna garantía de que el cifrado no pueda romperse. Incluso si el cifrado es seguro por sí solo, en combinación con otras primitivas criptográficas, puede resultar fácilmente rompible. Es por eso que rodar tu propio cripto es un gran tabú. Hacerlo bien es muy difícil y no descubrirás que hiciste algo mal hasta que alguien lo rompa, o si tienes mala suerte, ni siquiera después de eso.

    
respondido por el Peter Harmann 02.05.2018 - 17:26
fuente
2

Exención de responsabilidad obligatoria.

Realmente no debe rodar su propio.

No es como la programación normal, donde puedes reinventar tu propia rueda con una forma o color diferente.

Cualquier pequeño detalle puede introducir una debilidad que ni siquiera conoces, y que puede romper completamente tu esquema.

Como su habilidad para diseñar criptografía es (comprensiblemente) baja, la probabilidad es alta. Cuanto más sensibles sean los datos que confía a su esquema, o cuanto más tiempo los utilice, mayor será el impacto.

Alta probabilidad + alto impacto - > alto riesgo.

Ni siquiera los criptógrafos profesionales inventan esquemas y los usan de inmediato.

Además, incluso los buenos algoritmos pueden implementarse mal. Una vez más, implementar algoritmos (incluso buenos algoritmos) es algo que no debes hacer, a menos que sea realmente necesario. En todo caso, inventar sus propios algoritmos es incluso (por mucho) menos necesario.

No pongas estas cosas en producción, punto.

No uses estas cosas para ninguna información que te importe, punto.

Dicho esto, si desea diseñar algo solo para fines de aprendizaje , el consejo de @HeterHarmann es válido.

Solo voy a ampliar un poco los algoritmos simétricos.

La mayoría de los cifrados de bloque se basan en dos enfoques, SPN o Redes de feistel . Elige uno.

Si vas con SPN, el número redondo puede ser relativamente bajo, pero recuerda que necesitas una caja P bastante grande.

También debe diseñar una forma de obtener la clave redonda.

Ahora viene la parte divertida ... ¡rómpelo!

No diseño criptografía, pero si tuviera que hacerlo, por alguna razón poco probable, verificaría que el esquema sea razonablemente seguro al menos contra el criptoanálisis lineal y diferencial.

No es un pedazo de pastel, pero lo estás haciendo con fines de aprendizaje, ¿no?

    
respondido por el A. Darwin 03.05.2018 - 19:09
fuente
0

Hay ciertos atributos que los cifrados necesitan. La propiedad de indistinguibilidad del texto cifrado dice que los pares de salida de un cifrado no pueden distinguirse entre sí. Así que realiza pruebas en las salidas, comparándolas.

Otra propiedad es la de la difusión: un cambio de un bit a la entrada de un cifrado de bloque debe tener un efecto dominó que produce un cambio promedio de 50% de bits en la salida. Eso debería ser comprobable.

Use fuzz testing en las entradas para proporcionar una variedad de muestras para comparar.

Básicamente, lo que estás buscando son todos los atributos que hacen que los cifrados sean seguros, y tratar de encontrar formas de escribir pruebas contra ellos.

A continuación, sigue con los ataques. ¿Cuáles son los ataques clásicos en cifrados similares a los suyos? Comience con ataques redondos reducidos y aprenda cuántas rondas tomará para difundir adecuadamente el texto cifrado. Comprenda cómo funciona su difusión y estructure sus rondas y mezcle en consecuencia.

Y como todos los demás aquí, me siento obligado a terminar con La Ley de Shneier : "Cualquiera, desde el aficionado más despistado hasta el mejor criptógrafo, puede crear un algoritmo que él mismo no puede romper". Esto no es solo un grupo de aficionados a la web que te dicen que no lo hagas tú mismo; Este es uno de los criptógrafos más prominentes del planeta, y recuerda a otros criptógrafos talentosos que no deben rodar por sí mismos. Presta atención a su advertencia.

    
respondido por el John Deters 06.05.2018 - 05:36
fuente

Lea otras preguntas en las etiquetas