textos secretos para ocultos oculto niños mensajes mensaje hacer escrito escribir encriptados ejemplos descifrar como codigos clave amor security language-agnostic encryption cryptography

security - secretos - mensajes encriptados de amor



¿Qué técnicas usas cuando escribes tus propios métodos de criptografía? (19)

A menos que se convierta en un experto en el campo, no use criptografía casera en productos de producción. Basta de charla.

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

Creo que es más justo decir que estoy fascinado por aquellos que pueden romper varios métodos de encriptación, pero estoy divagando.

Hasta el punto: ¿qué métodos usas cuando escribes criptografía? ¿La ofuscación es buena en la criptografía?

Utilizo dos cifrados XOR basados ​​en claves, varias técnicas de hashing (SHA1) en las claves y cosas simples como invertir cadenas aquí y allá, etc.

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

Para aclarar: no deseo utilizar esto en ningún código de producción ni en ningún código mío para el caso. Soy interesante para aprender cómo funciona jugando, no reinventando la rueda. :)

Ian


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.

Obtenga el libro de Bruce Schneier Applied Cryptography y léalo cuidadosamente.


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 todo el mundo sabe exactamente cómo funciona y, sin embargo, nadie puede romperlo.


Haz los ejercicios aquí:

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

Para empezar, mira el documento de ataque al cubo ( http://eprint.iacr.org/2008/385 ) e intenta romper algunos algoritmos con él. Una vez que esté familiarizado con los esquemas criptográficos de última instancia, será mejor para crearlos.

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


La única criptografía que los no expertos deberían poder obtener es la de los algoritmos simples One Time Pad.

CipherTextArray = PlainTextArray ^ KeyArray;

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


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

En otras palabras, todos parecen ser capaces de diseñar un nuevo código que todos puedan romper, excepto ellos. El mejor cripto supera la prueba de tener el algoritmo y algunos mensajes encriptados y tener los mejores hackers de criptografía para intentar romperlo.

En general, la mayoría de los métodos de ofuscación y hashing simple (y yo mismo he hecho algunos de ellos) se rompen fácilmente. Eso no significa que no sean divertidos para experimentar y aprender.

Lista de libros de criptografía (de Wikipedia)

Esta pregunta me llamó la atención porque actualmente estoy volviendo a leer Cryptonomicon de Neal Stephenson, que no es una mala descripción en sí misma, a pesar de que es una novela ...


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

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

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

Editar: para expandir la nueva información dada en la edición. La gran mayoría de la criptografía actual implica muchas matemáticas complicadas. Incluso las cifras de bloque que parecen ser todo tipo de munging alrededor de bits son las mismas.

En este caso, lea Applied Cryptography y luego obtenga el libro Handbook of Applied Cryptography, que puede descargar de forma gratuita.

Ambos tienen mucha información sobre lo que entra en un algoritmo de criptografía. Alguna explicación de cosas como criptoanálisis diferencial y lineal. Otro recurso es Citeseer, que tiene una serie de documentos académicos referenciados por ambos libros para su descarga.

La criptografía es un campo difícil con una gran historia académica para ir a cualquier parte. Pero si tienes las habilidades es bastante gratificante, como he descubierto.


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

Solo 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 encontrar la correcta. La seguridad de un código no era su aprobación -key no se podía leer, sino que la mayoría de la gente no tenía tiempo ni equipo para probar ".
Solo que eso no es intrínsecamente verdadero; Dan Brown lo inventó.


Para hacer eco de todos los demás (para la posteridad), nunca implementes tu propia criptografía. Usa 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 encriptación. El objetivo no es ocultar cosas, sino agregar pasos al proceso que hacen que los ataques de fuerza bruta sean poco prácticos.

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


Por lo general, comienzo obteniendo un doctorado en teoría de números. Luego hago una década más o menos de investigación y lo sigo con mucha publicación y revisión por pares. En cuanto a las técnicas que uso, son varias de mi investigación y la de mis compañeros. Ocasionalmente, cuando me levanto en medio de la noche, desarrollaré una nueva técnica, la implementaré, encontraré agujeros en ella (con la ayuda de mi teoría numérica y mis compañeros de ciencias de la computación) y luego la perfeccionaré desde allí.

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


Según otras respuestas, inventar un esquema de encriptación es definitivamente una cosa para los expertos y cualquier nuevo criptograma propuesto realmente necesita someterse al escrutinio público para cualquier esperanza razonable de validación y confianza en su robustez. Sin embargo, la implementación de 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 probar la corrección de su implementación.

Dicho esto, para las soluciones de producción, las implementaciones existentes son abundantes y, por lo general, no debería haber ninguna razón por la que deba implementar un sistema usted mismo.


Tengo que estar de acuerdo con otros carteles. No lo haga, a menos que esté escribiendo un artículo y necesite hacer alguna investigación o algo.

Si crees que sabes mucho al respecto, ve y lee el libro de Criptografía Aplicada . Sé mucho de matemáticas y ese libro aún me pateó el culo. Puedes leer y analizar desde su pseudo-código. El libro también tiene un montón de referencias en la parte posterior para cavar más profundo si lo desea.

Crypto es una de esas cosas que mucha gente piensa que es genial, 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 quiere ver CÓMO se hace (estudiar las implementaciones existentes en el código), le sugiero que eche un vistazo a la biblioteca Crypto ++ incluso si normalmente no codifica en C ++, es una buena vista de los temas y partes de la implementación del cifrado. .

Bruce también tiene una buena lista de recursos que puede obtener de su sitio.


Todos los consejos anteriores son sólidos. Ofuscación mala No ponga su propia criptografía en producción sin antes dejar que el público la golpee por un tiempo.

un par de cosas para agregar:

  • La codificación no es encriptación. Hace poco supere el sistema de autenticación de un sitio web debido a la incomprensión de los desarrolladores aquí.

  • Aprenda cómo romper incluso los sistemas más básicos. Te sorprendería la frecuencia con la que el conocimiento de las cifras simples de rotación es realmente útil.

  • A ^ B = C. Usted indicó que ha estado trabajando con dos claves de cifrado XOR. Cuando construyas un criptosistema, siempre verifica que tus pasos realmente estén logrando algo. en los dos casos clave de XOR, solo estás usando una clave diferente.

  • A ^ A = 0. La encriptación de XOR es muy débil contra los ataques de texto claro conocidos o elegidos. Si conoce todo o parte del texto plano, puede obtener la totalidad o parte de la clave. Texto simple ^ Cifraxto = 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 romper la mayoría de los criptosistemas que cubre.

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

    • 3DES: sí, está obsoleto, pero es un buen punto de partida para aprender fiestel y bloquear cifras y hay algunas buenas lecciones en su creación de DES. Además, es útil aprender el razonamiento de la metodología de cifrado, descifrado y cifrado.
    • RSA: Voy a mostrar mi friki matemático interno aquí. Probablemente el algoritmo de encriptación más simple en uso hoy en día. Se conocen métodos para romperlo (solo factorizar la clave) pero computacionalmente extremadamente difícil. m ^ d mod n donde n = p * q (p y q prime) y gcd (d, n) = 1. Un poco de teoría de grupo / número explica por qué esto no se revierte fácilmente sin conocer pyq. En mi curso de teoría numérica, demostramos la teoría detrás de esto al menos media docena de maneras.

Una nota para PhirePhly:

la factorización principal y el registro discreto no son NP-Complete, o NP-Hard para el caso. Ambos son desconocidos en complejidad. Me imagino que obtendrías una cantidad decente de la fama solo por deducir esa parte. Dicho eso, el resto de su afirmación es correcta. La buena criptografía se basa en cosas que son fáciles de hacer pero difíciles de deshacer sin la clave.


¡NO!

Incluso los expertos tienen dificultades para saber si lo hicieron bien. Fuera de una clase crypto CS, solo usa el código de otras personas. Código de puerto solo si es absolutamente necesario y luego prueba el moco con un buen código conocido.


Asistí a una sesión de seguridad del código en este año Aus TechEd. Cuando hablamos sobre el 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 usar una cámara termográfica para registrar la firma de calor de una CPU mientras codificaba los 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 en sus manos, y estoy bastante seguro de que nunca seré lo suficientemente inteligente como para vencer a las personas de esa manera! :(

  • Nota: Espero sinceramente haber transmitido la historia correctamente, si no, es probable que el error sea mío, no el del presentador mencionado.

Estoy de acuerdo con todas las respuestas, tanto " no escribo tu propio algoritmo criptográfico para uso de producción" y " infierno sí, ve por tu propia edificación ", pero me recuerda algo que creo que el venerable Bruce Schneier a menudo escribe : " es fácil para alguien crear algo que ellos mismos no pueden romper".


Ya ha sido golpeado hasta la muerte que no deberías usar cripto casero en un producto. Pero leí tu pregunta y dices claramente que solo lo haces por diversión. Suena como el verdadero espíritu geek / hacker / académico para mí. Sabes que funciona, quieres saber por qué funciona y tratar de ver si puedes hacer que funcione.

Lo animo por completo y hago lo mismo con muchos programas que he escrito solo 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 la publicación hay una serie de enlaces que deberías encontrar muy interesantes. Un chico interesado en matemáticas / criptografía con un doctorado en informática y que trabaja para Google decidió escribir una serie de artículos sobre criptografía de programación. Hizo varios errores no evidentes que fueron señalados por el experto en la industria Nate Lawson.

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

¡La mejor de las suertes!


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

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

Primer problema: dada una solución candidata p, podemos fácilmente (es decir, en tiempo polinomial) verificar si 1 <p <= k y si p divide n. Una solución p siempre es más corta (en la cantidad de bits utilizados para representarla) que n, por lo que el factoring está en NP.

Segundo problema: dada una factorización prima completa (p_1, ..., p_m), podemos verificar 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. Como 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 yk, hay una prueba corta (de tamaño polinomial) que se puede verificar rápidamente (en tiempo polinomial).

Entonces el factoring está en NP y en PNP. Si era NP-completo, entonces NP sería igual a coNP, algo que a menudo se supone que es falso. Uno puede tomar esto como evidencia de que el factoring no es NP-completo; Prefiero esperar una prueba ;-)


Para contradecir lo que todos los demás han dicho hasta ahora, ¡adelante! Sí, su código puede tener vulnerabilidades de desbordamiento de búfer, y puede ser lento, con errores, etc., ¡pero lo está haciendo para DIVERTIRSE ! Entiendo completamente el disfrute recreativo que se encuentra al jugar con crypto.

Dicho esto, la criptografía no se basa en la ofuscación en absoluto (o al menos no debería ser). La buena criptografía continuará funcionando, incluso una vez que Eve haya navegado a través de su código ofuscado y comprenda completamente lo que está sucediendo. IE: Muchos periódicos tienen acertijos de códigos de sustitución que los lectores intentan romper durante el desayuno. Si comenzaran a hacer cosas como invertir todo el hilo, sí, sería más difícil, pero Joe Reader aún podría romperlo, neve tuohtiw gnieb dlot.

El buen cifrado se basa en problemas que se supone que son (ninguno probado aún, AFAIK) realmente difícil. Ejemplos de esto incluyen primos de factoraje , encontrar el registro o realmente cualquier otro problema NP-completo .

[Editar: ajuste, ninguno de esos está probado NP-completo. No están probados, pero son diferentes. Espero que todavía veas mi punto: crypto se basa en funciones unidireccionales. Esas son operaciones que son fáciles de hacer, pero difíciles de deshacer. es decir, multiplica dos números frente a los factores primos del producto. Buena captura tduehr ]

Más poder para jugar con una rama de las matemáticas realmente genial, solo recuerda que la criptografía se basa en cosas que son difíciles, no complicadas. Muchos algoritmos de cifrado, una vez que realmente los entiendes, son sorprendentemente simples, pero aún funcionan porque se basan en algo que es difícil, no solo en cambiar las letras.

Nota: Dicho esto, algunos algoritmos agregan peculiaridades extra (como el corte de cuerdas) para hacer que sea mucho más difícil forzarlos. Una parte de mí se siente como si leyera esto en alguna parte haciendo referencia a DES , pero no lo creo ... [EDIT: tenía razón, vea el quinto párrafo de este artículo para una referencia a las permutaciones como inútiles.]

Por cierto: si no lo has encontrado antes, creo que la serie de algoritmos TEA / XTEA / XXTEA sería de interés.