Escribiendo mi propio algoritmo de cifrado [cerrado]

51

Actualmente estoy estudiando informática en la universidad (UK college aka not University) y el curso me está aburriendo. He estado programando durante bastante tiempo, principalmente en lenguajes OO como C # y Java, pero a menudo me aburro y me doy por vencido rápidamente porque la mayoría son cosas de UI aburridas que odio hacer, los proyectos que se me ocurren rara vez tienen mucho que hacer Con diseño de código y en realidad creando algoritmos. Quiero comenzar a escribir mis propios algoritmos y empezar a alejarme del lado de la facilidad de uso y comenzar a aprender cosas que me interesan, a saber, la criptografía y la compresión. Quiero escribir mi propio algoritmo de cifrado, para cifrar los bytes de un archivo o cadena. Tengo algunas preguntas:

  • ¿Por dónde empiezo con esto, qué libros / materiales se recomiendan? para comenzar con la criptografía?
  • ¿Necesito un amplio conocimiento de criptografía para comenzar con una algoritmo?
  • ¿C # estará bien para poner en práctica un algoritmo de cifrado?

Cualquier ayuda sería sinceramente apreciada. Quiero comenzar a escribir código, así que cuando se trata de presentar una solicitud a uni, ¡tengo algo que mostrar para todas mis afirmaciones en negrita en mi solicitud!

    
pregunta Confuto 22.11.2015 - 16:15
fuente

9 respuestas

138

Por supuesto, puedes comenzar poco a poco e implementar tus propios algoritmos. Pero no asuma que proporcionan seguridad más allá de la ofuscación .

Lo difícil cuando se trata de criptografía es encontrar razones por las cuales algo en realidad es seguro. No podrás decidir eso en unos meses y si sientes que estás en ese punto, lo más probable es que estés equivocado.

Es mucho más fácil encontrar razones por las cuales las cosas son inseguras que razones por las que son seguras, así que si quieres comenzar en algún lugar, desarrolla tus propios algoritmos hasta que creas que están seguros y luego trata de averiguar por qué no lo están y Encuentra formas de atacarlos.

La mayoría de los errores se cometen al implementar algoritmos. Entonces, si quieres obtener un trabajo bien pagado, puedes aprender cómo implementar esas cosas correctamente.

Recomendaría comenzar a implementar algo como AES y luego continuar con diferentes modos de operación como CBC o CCM y descubrir por qué la aleatoriedad es importante. Continúe con SHA-2 y HMAC y proceda a la criptografía asimétrica. Siempre verifique qué hicieron los demás y por qué lo hicieron, y tenga una mirada especial sobre los ataques de canal lateral y cómo se realizan. Si está en ese punto, encontrará la manera de continuar.

La referencia para comenzar sería "HAC", que está disponible gratuitamente en línea: enlace

[Editar] Una sugerencia de JRsz que no será enterrada en los comentarios. Un buen libro para principiantes: enlace

    
respondido por el fr00tyl00p 22.11.2015 - 17:59
fuente
37

Coursera

Aquí están mis 2 centavos:

Únase a la clase en línea Coursera Cryptography:

La clase toma seis semanas. Cada semana hay varios videos de conferencias, un cuestionario calificado y una asignación de programación opcional. (Y estas asignaciones implican la implementación de partes criptográficas).

Al final de las seis semanas hay una prueba.

Si quieres que te desafíen, este es el camino correcto. Es mucho trabajo. Te sugiero que planees más de 10 horas cada semana. Más si quieres hacer la asignación de programación también.

( Editar: aquí hay una tabla de contenido para una ejecución previa de esta clase . )

Aclaración: las tareas de programación están ahí para generar una comprensión más profunda del tema. No son explícitamente algo que luego debes liberar en la naturaleza.
Al contrario: el mensaje "¡No lo implementes tú mismo!" se repite una y otra vez. (Y sin revelar demasiado: siempre que "¡Solo implementalo tú mismo!" se encuentra en una de las pruebas de selección múltiple, es incorrecto.)

    
respondido por el StackzOfZtuff 22.11.2015 - 17:56
fuente
21

Comienza rompiendo, no construyendo el tuyo. Hay una cantidad preocupantemente grande de publicaciones de intercambio de pila por personas que han escrito sus propios algoritmos. Eche un vistazo y averigüe qué les pasa. (No mire las respuestas publicadas.) [Las buenas búsquedas incluyen "¿Es esto seguro?" Y "¿Qué hay de malo con este algoritmo?".]

Solo cuando hayas encontrado problemas en el trabajo de otras personas, deberías pasar a intentar implementar los algoritmos de otras personas. (El comentario de @ stackzofztuff sobre Coursera no es malo. Si recuerdo, Dan Boneh comienza así, con más estructura que empujando aquí).

    
respondido por el Adam Shostack 22.11.2015 - 18:17
fuente
13

Criptografía aplicada de Bruce Schneier es una lectura obligatoria si desea comenzar a estudiar este campo. Me sorprende que nadie lo haya sugerido antes.

Y sí, necesitas saber mucho sobre criptografía incluso antes de intentar rodar tus propios algoritmos para divertirte. Sin embargo, ni siquiera pienses en usarlos para problemas del mundo real, ya hay una gran cantidad de mal criptografía alrededor.

Con respecto a la programación, evite los lenguajes propietarios como la plaga. Sugeriría C, o incluso C ++.

    
respondido por el dr01 23.11.2015 - 10:56
fuente
10

Un buen comienzo sería implementar algoritmos existentes y aprender cómo funcionan en profundidad. Por ejemplo, el algoritmo del teclado de una sola vez es fácil de aprender e implementar, y el estudio de sus fortalezas y debilidades lo ayudará a comenzar. También te hará sentir cómodo con el tipo de twiddling de bits que es importante en la criptografía. Hacer una búsqueda de "pad de una sola vez" te ayudará a comenzar.

    
respondido por el Scott C Wilson 22.11.2015 - 16:36
fuente
6

Solo para apilar las grandes respuestas que están aquí, con un ángulo diferente.

Si asumes que tu algoritmo v1 será inseguro y horrible, y tu v100 será solo un poco mejor, pero igualmente inseguro. (como lo hará su v1000)

Con este supuesto en mente, puede aprender mucho resolviendo los problemas que la criptografía ha necesitado resolver para convertirse en la ciencia que es hoy. es decir, reinventar la rueda.

Personalmente encuentro que reinventar la rueda es una excelente manera de aprender una tarea compleja. Te da algo que resolver. Si eso es lo tuyo, hay menos cosas que son más difíciles de resolver que la criptografía.

De esa manera, puedes ir a la Universidad y decir, bueno, he estado diseñando mi propio algoritmo de criptografía como un vehículo para aprender a resolver problemas difíciles. En v50 el algoritmo apesta, pero estas son las lecciones que aprendí, las soluciones que encontré y así es como se resuelven en el mundo real.

Hay una gran diferencia entre decir que he escrito un protocolo de criptografía "bueno" y decir que he escrito un protocolo que es casi seguro que es muy débil, pero el propósito no era crear un protocolo seguro. Personalmente, tendría un gran respeto por alguien que dijo esto último. (Probablemente asentiré con el primero y le mostraré rápidamente la puerta)

    
respondido por el Michael B 23.11.2015 - 22:47
fuente
3

Puede implementar algoritmos de cifrado ya existentes, pero diseñar su propio algoritmo de cifrado es uno de los asuntos más complejos con los que podría lidiar. Para una introducción general, recomiendo este canal: enlace o el libro "Understanding Cryptography" por Christoph Paar y Jan Pelzl ( enlace ). Asumo que apuntas a algoritmos simétricos y te recomendaría que comiences a leer mucha teoría acerca de ellos, lo que es seguro es que no es seguro (historicle) y explícitamente cómo los algoritmos actuales del estado de la técnica se han abierto camino hacia lo que son. (¿Cómo se desarrolló, eligió, etc., AES?

Encontrarás muchos problemas matemáticos al tratar con diferentes modelos de atacantes, incluso en la parte simétrica. La criptografía asimétrica se basa principalmente en problemas matemáticos y existen algunos ataques muy difíciles que son muy poderosos contra la criptografía asimétrica.

La conclusión es que no desarrolle sus propios algoritmos, a menos que tenga muchos años de experiencia y esté muy familiarizado con el tema (todas las partes). Sin embargo, implementar algunos de ellos es una buena idea, pero si está buscando algún tipo de proyecto, ¿por qué no escribe un programa que utiliza algoritmos ya existentes y descifra algunos datos por usted? Tendrá suficientes problemas para lidiar con eso, porque un algoritmo seguro no es una garantía en absoluto para el cifrado seguro. Diferentes modos de operación serán importantes en este asunto y también en otros temas.

    
respondido por el JRsz 22.11.2015 - 21:42
fuente
2

Podrías seguir la sugerencia de Scott Wilson sobre el pad de One-Time, pero con datos aleatorios reales. Puedes por ejemplo Considera el ruido de la webcam de la computadora. Deje que la cámara web tome algunas fotos de una escena estática, convierta las imágenes a imágenes de punto flotante de 32 bits, normalice las imágenes al mismo brillo, tome el promedio y luego reste una de las imágenes del promedio. Si asigna valores de píxeles negativos a 0 y valores de píxeles positivos a 1, casi tiene bits perfectamente aleatorios, que no están correlacionados cuando los píxeles no están demasiado cerca. Aplicación del algoritmo de von Neumann a pares de bits tomados de píxeles distantes:

(0,1) --- > 0

(1,0) --- > 1

(0,0) y (1,1) se descartan

producirá bits aleatorios perfectos con 0 y 1 con un 50% de probabilidad.

    
respondido por el Count Iblis 23.11.2015 - 07:25
fuente
2

Adelante, escriba un algoritmo, pero al final, asigne una tarea a uno de sus amigos / compañeros que se ocupan regularmente de la criptografía. dígales que rompan su cifrado si pueden.

Se dará cuenta de que podrán romperlo en cuestión de minutos y se quedarán atónitos pensando en cuántas lagunas existen que dieron el juego a las personas con amplios conocimientos de criptografía (para responder a tus palabras)

Esto es exactamente lo que me sucedió cuando estaba aprendiendo a programar hace mucho tiempo y quería desafiar a algunos tipos que eran inteligentes en esas cosas y fallé miserablemente. Tanto es así que incluso podrían descifrar el mensaje impreso en un papel usando solo su mente y sus habilidades.

Ciertamente, puede escribir uno y perfeccionarlo a lo largo del tiempo, pero de ninguna manera puede ser seguro en un futuro cercano contra las personas con ese conocimiento.

Ese será un buen punto de partida (o incluso un punto de parada) en tu búsqueda para escribir tu propio algoritmo :)

    
respondido por el Hanky Panky 23.11.2015 - 08:15
fuente

Lea otras preguntas en las etiquetas