Pregunta

Durante años, tal vez diez, he estado fascinado con la criptografía.Leí un libro sobre el cifrado basado en bits XOR y desde entonces me he enganchado.

Supongo que es más justo decir que me fascinan aquellos que pueden descifrar varios métodos de cifrado, pero estoy divagando.

Al grano: ¿qué métodos utiliza al escribir criptografía?¿Es buena la ofuscación en criptografía?

Utilizo cifrado XOR basado en dos claves, varias técnicas de hash (SHA1) en las claves y cosas simples como invertir cadenas aquí y allá, etc.

Me interesa ver qué piensan y prueban los demás al escribir un método de cifrado no tan innovador.Además, cualquier información sobre cómo hacen los profesionales para "romper" varias técnicas de criptografía también sería interesante.

Para aclarar: no tengo ningún deseo de usar esto en ningún código de producción, ni en ningún código mío.Me interesa aprender cómo funciona jugando, no reinventando la rueda.:)

ian

¿Fue útil?

Solución

Para contradecir lo que todos los demás han dicho hasta ahora, ¡A por ello! Sí, es posible que su código tenga vulnerabilidades de desbordamiento del búfer y que sea lento, tenga errores, etc., pero está haciendo esto por DIVERTIDO!Entiendo completamente el placer recreativo que se encuentra al jugar con criptomonedas.

Dicho esto, la criptografía no se basa en absoluto en la ofuscación (o al menos no debería estarlo).Las buenas criptomonedas seguirán funcionando, aunque sea una vez Víspera ha revisado su código ofuscado y comprende completamente lo que está pasando.ES DECIR:Muchos periódicos tienen código de sustitución acertijos que los lectores intentan resolver durante el desayuno.Si comenzaran a hacer cosas como invertir toda la cuerda, sí, sería más difícil, pero Joe Reader aún podría romperla, nunca lo harás.

Una buena criptografía se basa en problemas que se supone que son (ninguno probado todavía, AFAIK) realmente difíciles.Ejemplos de esto incluyen factores primos, encontrar el registro, o realmente cualquier otro NP-completo problema.

[Editar:chasquido, ninguno de esos lo es probado NP-completo.Todos ellos no están probados, pero son diferentes.Ojalá todavía entiendas mi punto:Las criptomonedas se basan en funciones unidireccionales.Son operaciones fáciles de realizar, pero difíciles de deshacer.es decir, multiplicar dos números y encontrar los factores primos del producto.Buena atrapada tduehr]

Más poder para ti por jugar con una rama realmente interesante de las matemáticas, solo recuerda que las criptomonedas se basan en cosas que son difíciles, no complicadas.Muchos algoritmos criptográficos, una vez que realmente los comprendes, son asombrosamente simples, pero aún funcionan porque se basan en algo que es difícil, no solo en cambiar letras.

Nota:Dicho esto, algunos algoritmos agregan peculiaridades adicionales (como varias cadenas) para hacer que la fuerza bruta sea mucho más difícil.Una parte de mí siente que leí esto en alguna parte haciendo referencia DES, pero no lo creo...[EDITAR:Tenía razón, mira 5to párrafo de este artículo para una referencia a las permutaciones como inútiles.]

POR CIERTO:Si no lo has encontrado antes, supongo que /XTEA/XXTEA Sería de interés una serie de algoritmos.

Otros consejos

El mejor consejo que puedo darte es:Resiste la tentación de reinventar la rueda.La criptografía es más difícil de lo que piensas.

Consigue el libro de Bruce Schneier Criptografía aplicada y léelo atentamente.

La respuesta correcta es no hacer algo como esto.El mejor método es elegir una de las muchas bibliotecas de criptografía que existen para este propósito y utilizarla en su aplicación.La seguridad a través de la oscuridad nunca funciona.

Elija también los principales estándares actuales para algoritmos de criptografía.AES para cifrado, SHA256 para hash.Elgamal para clave pública.

Leer criptografía aplicada también es una buena idea.Pero la gran mayoría del libro son detalles de implementaciones que no necesitará para la mayoría de las aplicaciones.

Editar:Para ampliar la nueva información proporcionada en la edición.La gran mayoría de la criptografía actual implica muchas matemáticas complicadas.Incluso los cifrados en bloque, que parecen todo tipo de juegos de bits, son iguales.

En este caso, lea Criptografía aplicada y luego obtenga el libro. Manual de criptografía aplicada que puedes descargar gratis.

Ambos tienen mucha información sobre lo que implica un algoritmo de criptografía.Alguna explicación de cosas como el criptoanálisis diferencial y lineal.Otro recurso es Citeseeer que tiene una serie de artículos académicos a los que se hace referencia en ambos libros para descargar.

La criptografía es un campo difícil con una enorme historia académica para llegar a cualquier parte.Pero si tienes las habilidades, es bastante gratificante, como a mí me parece.

Haz los ejercicios aquí:

http://www.schneier.com/crypto-gram-9910.html#SoYouWanttobeaCryptographer

Para empezar, mire el documento de ataque del cubo (http://eprint.iacr.org/2008/385) e intenta romper algunos algoritmos con él.Una vez que esté familiarizado con cómo descifrar esquemas criptográficos, mejorará en su creación.

En cuanto al código de producción, repetiré lo ya dicho:simplemente use lo que esté disponible en el mercado, ya que todos los esquemas principales ya han pasado por múltiples rondas de criptoanálisis.

Todos los consejos anteriores son sensatos.Ofuscación mala.No pongas en producción tu propia criptomoneda sin antes dejar que el público la supere por un tiempo.

un par de cosas para agregar:

  • La codificación es no cifrado.Recientemente omití el sistema de autenticación de un sitio web debido a un malentendido por parte de los desarrolladores.

  • Aprenda a romper incluso los sistemas más básicos.Le sorprendería comprobar con qué frecuencia resulta realmente útil conocer los cifrados de rotación simples.

  • A^B = C.Dijo que ha estado trabajando con cifrado XOR de dos claves.Al construir un criptosistema, siempre verifique que sus pasos realmente estén logrando algo.en el caso XOR de dos claves, en realidad solo estás usando una clave diferente.

  • A^A = 0.El cifrado XOR es muy débil contra ataques de texto plano conocidos o elegidos.Si conoce todo o parte del texto sin formato, puede obtener toda o parte de la clave.Texto sin formato ^ Texto cifrado = Clave

  • Otro buen libro para leer es The Code Book de Simon Singh.Repasa parte de la historia de la criptografía y los métodos para descifrar la mayoría de los criptosistemas que cubre.

  • Dos algoritmos para aprender (aprenderlos y la historia detrás de ellos):

    • 3DES:Sí, está obsoleto, pero es un buen punto de partida para aprender Fiestel y cifrado de bloques, y hay algunas buenas lecciones en su creación a partir de DES.Además, es bueno aprender el razonamiento de la metodología de cifrar, descifrar y cifrar utilizada.
    • RSA:Voy a mostrar mi friki de las matemáticas interior aquí.Probablemente el algoritmo de cifrado más simple que se utiliza en la actualidad.Los métodos para descifrarlo son conocidos (solo factorice la clave), pero computacionalmente son extremadamente difíciles.m^d mod n donde n = p*q (p y q primos) y mcd(d,n)=1.Un poco de teoría de grupos/números explica por qué esto no se puede revertir fácilmente sin conocer p y q.En mi curso de teoría de números demostramos la teoría detrás de esto al menos de media docena de maneras.

Una nota para PhirePhly:

La factorización prima y el registro discreto no son NP-completos ni NP-difíciles.Ambos son desconocidos en complejidad.Me imagino que obtendrías una buena cantidad de fama con solo descubrir esa parte.Dicho esto, el resto de tu afirmación es correcta.Una buena criptografía se basa en cosas que son fáciles de hacer pero difíciles de deshacer sin la clave.

A menos que sea (convirtiéndose) en un experto en el campo, no utilice criptomonedas caseras en productos de producción.Basta de charla.

¡NO!

Incluso los expertos tienen una muy Es difícil saber si lo hicieron bien.Fuera de una clase de cripto CS, simplemente use el código de otras personas.Porte el código solo si es absolutamente necesario y luego pruébelo con un código que sepa que funciona bien.

La mayoría de los expertos coinciden en que la apertura es más valiosa que la ofuscación en el desarrollo de métodos y algoritmos criptográficos.

En otras palabras, todos parecen ser capaces de diseñar un nuevo código que todos pueden descifrar excepto ellos.La mejor criptografía sobrevive a la prueba de que el algoritmo y algunos mensajes cifrados se publiquen y que los mejores piratas informáticos criptográficos intenten descifrarlos.

En general, la mayoría de los métodos de ofuscación y hash simple (y yo mismo he hecho bastantes de ellos) se descifran muy fácilmente.Eso no significa que no sea divertido experimentar con ellos y aprender sobre ellos.

Lista de libros de criptografía (de Wikipedia)

Esta pregunta me llamó la atención porque actualmente estoy releyendo. Criptonomicón de Neal Stephenson, que no es un mal resumen en sí mismo, aunque es una novela...

Para hacernos eco de todos los demás (para la posteridad), nunca implementes tu propia criptografía.Utilice una biblioteca.

Dicho esto, aquí hay un artículo sobre cómo implementar DES:

http://scienceblogs.com/goodmath/2008/09/des_encryption_part_1_encrypti.php

La permutación y el ruido son cruciales para muchos algoritmos de cifrado.El punto no es tanto oscurecer las cosas, sino agregar pasos al proceso que hagan que los ataques de fuerza bruta sean poco prácticos.

Además, obtenga y lea Criptografía aplicada.Es un gran libro.

Tengo que estar de acuerdo con otros carteles.No lo hagas a menos que estés escribiendo un artículo sobre ello y necesites investigar un poco o algo así.

Si crees que sabes mucho al respecto, lee el Criptografía aplicada libro.Sé muchas matemáticas y ese libro todavía me pateó el trasero.Puedes leer y analizar desde su pseudocódigo.El libro también tiene un montón de referencias al final para profundizar más si lo deseas.

Las criptomonedas son una de esas cosas que mucha gente piensa que son geniales, pero las matemáticas reales detrás de los conceptos están fuera de su alcance.Decidí hace mucho tiempo que no valía la pena el esfuerzo mental para llegar a ese nivel.

Si solo desea ver CÓMO se hace (estudiar las implementaciones existentes en el código), le sugiero que eche un vistazo a Biblioteca cripto++ Incluso si normalmente no codifica en C++, es una buena visión de los temas y partes de la implementación del cifrado.

Bruce también tiene una buena lista de recursos puedes conseguirlo en su sitio.

Asistí a una sesión de seguridad de códigos en Aus TechEd de este año.Al hablar del algoritmo AES en .Net y cómo fue seleccionado, el presentador (Rocky Heckman) nos contó una de las técnicas que se habían utilizado para romper el cifrado anterior.Alguien había logrado utilizar una cámara termográfica para registrar la firma de calor de una CPU mientras cifraba datos.Pudieron utilizar esta grabación para determinar qué tipos de cálculos estaba haciendo el chip y luego aplicar ingeniería inversa al algoritmo.¡Tenían demasiado tiempo libre y estoy bastante seguro de que nunca seré lo suficientemente inteligente como para vencer a personas así!:(

  • Nota:Sinceramente espero haber transmitido la historia correctamente; de ​​lo contrario, el error probablemente sea mío, no del presentador mencionado.

Ya se ha dicho que no se deben utilizar criptomonedas de cosecha propia en un producto.Pero leí tu pregunta y afirmas claramente que solo lo haces por diversión.Me parece el verdadero espíritu geek/hacker/académico.Sabes que funciona, quieres saber por qué funciona e intentar ver si puedes hacerlo funcionar.

Lo recomiendo completamente y hago lo mismo con muchos programas que he escrito sólo por diversión.Sugiero leer esta publicación (http://rdist.root.org/2008/09/18/dangers-of-amateur-cryptography/) en un blog llamado "rootlabs".En el post hay una serie de enlaces que te resultarán muy interesantes.Un chico interesado en matemáticas/cripto con un doctorado en informática y que trabaja para Google decidió escribir una serie de artículos sobre programación de cripto.Cometió varios errores no obvios que fueron señalados por el experto de la industria Nate Lawson.

Te sugiero que lo leas.Si no te anima a seguir intentándolo, sin duda te enseñará algo.

¡Toda la suerte!

Estoy de acuerdo con no reinventar la rueda.

Y recuerde, la seguridad a través de la oscuridad no es seguridad en absoluto.Si alguna parte de sus mecanismos de seguridad utiliza la frase "¡nadie se dará cuenta de esto!", no es seguro.Piense en AES: el algoritmo está disponible públicamente, por lo que todos sabe exactamente cómo funciona y, sin embargo, nadie puede romperlo.

Según otras respuestas, inventar un esquema de cifrado es definitivamente una cosa para los expertos y cualquier nuevo esquema de cifrado propuesto realmente debe someterse a escrutinio público para tener alguna esperanza razonable de validación y confianza en su solidez.Sin embargo, implementar algoritmos y sistemas existentes es una tarea mucho más práctica "por diversión" y todos los estándares principales tienen buenos vectores de prueba para ayudar a demostrar la exactitud de su implementación.

Dicho esto, para las soluciones de producción, las implementaciones existentes son abundantes y normalmente no debería haber ninguna razón para necesidad implementar un sistema usted mismo.

Estoy de acuerdo con todas las respuestas, ambas "no escribas tu propio algoritmo criptográfico para uso en producción" y "Demonios, sí, hazlo para tu propia edificación.", pero recuerdo algo que creo que el venerable Bruce Schneier escribe a menudo:"Es fácil para alguien crear algo que él mismo no puede romper".

La única criptografía que un no experto debería poder esperar acertar son los simples cifrados One Time Pad.

CipherTextArray = PlainTextArray ^ KeyArray;

Aparte de eso, cualquier cosa que valga la pena ver (incluso para recreación) necesitará un título de alto nivel en matemáticas.

No quiero profundizar en las respuestas correctas que ya se han dado (no lo hagas para producción;la simple reversión no es suficiente;ofuscación mala;etc).

Sólo quiero agregar el principio de Kerckoff: "Un criptosistema debe ser seguro incluso si todo lo relacionado con el sistema, excepto la clave, es de conocimiento público".

Mientras estoy en eso, también mencionaré el Principio de Bergofsky (citado por Dan Brown en Digital Fortress):"Si una computadora probaba suficientes claves, estaba matemáticamente garantizado que encontraría la correcta.La seguridad de un código no era que su clave de acceso fuera imposible de encontrar, sino que la mayoría de las personas no tenían el tiempo o el equipo para intentarlo".
Sólo que eso es inherentemente falso;Dan Brown lo inventó.

Respondiendo a PhirePhly y tduehr, sobre la complejidad del factoring:

Se puede ver fácilmente que la factorización se realiza en NP y coNP.Lo que necesitamos ver es que los problemas "dados n y k, encontrar un factor primo p de n con 1 < p <= k" y "mostrar que no existe tal p" están ambos en NP (siendo el primero la variante de decisión del problema de factoring, siendo la segunda la variante de decisión del complemento).

Primer problema:Dada una solución candidata p, podemos fácilmente (es decir,en tiempo polinómico) compruebe si 1 < p <= k y si p divide a n.Una solución p siempre es más corta (en el número de bits utilizados para representarla) que n, por lo que la factorización se realiza en NP.

Segundo problema:dada una factorización prima completa (p_1, ..., p_m), podemos comprobar rápidamente que su producto es n y que ninguno está entre 1 y k.Sabemos que PRIMES está en P, por lo que podemos verificar la primalidad de cada p_i en tiempo polinomial.Dado que el primo más pequeño es 2, hay como máximo log_2(n) factores primos en cualquier factorización válida.Cada factor es menor que n, por lo que utilizan como máximo O(n log(n)) bits.Entonces, si n no tiene un factor primo entre 1 y k, existe una prueba corta (de tamaño polinómico) que se puede verificar rápidamente (en tiempo polinómico).

Entonces la factorización es en NP y coNP.Si fuera NP-completo, entonces NP sería igual a coNP, algo que a menudo se supone falso.Se puede tomar esto como evidencia de que la factorización en realidad no es NP-completa;Prefiero esperar una prueba ;-)

Por lo general, comienzo obteniendo un doctorado en teoría de números.Luego hago aproximadamente una década de investigación y la sigo con muchas publicaciones y revisiones por pares.En cuanto a las técnicas que utilizo, son diversas provenientes de mi investigación y la de mis compañeros.De vez en cuando, cuando me despierto en medio de la noche, desarrollo una nueva técnica, la implemento, encuentro agujeros en ella (con la ayuda de mis compañeros de teoría de números y ciencias de la computación) y luego la refine a partir de ahí.

Si le das un algoritmo a un ratón...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top