¿Cuánta programación necesito saber si quería ingresar a la criptografía?

Voy a estar en desacuerdo con las otras dos respuestas hasta ahora: se necesita una comprensión profunda de los sistemas digitales (no solo computadoras, no solo programación) para realizar un trabajo relevante en criptografía.

La razón principal es simplemente porque todas las funciones criptográficas deben implementarse para ser útiles en el mundo de hoy. Si desea crear un nuevo cifrado, por ejemplo, solo se reconocerá siempre que pueda usarse con fines prácticos. La única forma en que se puede confiar en un nuevo cifrado es si ha sido auditado por expertos en seguridad, o si se ha utilizado ampliamente. Ambos escenarios requieren una implementación de hardware o software.

La creación de un nuevo algoritmo o el diseño de un ataque a uno existente requieren conocimiento de los sistemas digitales. Su nuevo cifrado debe ejecutarse en hardware existente sin problemas, por ejemplo. Los ataques de sincronización se basan en la diferencia en potencia de cómputo requerida por diferentes configuraciones de un algoritmo de encriptación. Todavía puede trabajar en ataques teóricos, etc., pero se limitaría significativamente.

Una analogía podría ser un diseñador seguro que no comprende los metales. Él / ella podría diseñar cajas fuertes increíbles, pero sin un conocimiento de los materiales utilizados para construir la caja fuerte, este diseñador podría crear cajas fuertes profundamente defectuosas. Ahora, el diseñador no tiene que ser un metalúrgico. Los diseñadores solo necesitan entender los metales y hasta dónde empujarlos. Lo mismo se aplicaría a usted.

La buena noticia es que obviamente eres inteligente y tienes una mente organizada, capaz de pensamiento secuencial. Estás muy por delante de la mayoría de los programadores. Seriamente. Creo que todo lo que necesita es encontrar su estilo y el lenguaje de programación que más le convenga. Comenzar con C ++ es realmente difícil. C por sí mismo puede ser desconcertante para un principiante, y agregar toda la POO además de eso realmente no prepara el escenario para una buena primera experiencia. Eventualmente, deberá trabajar en un lenguaje potente y de bajo nivel (probablemente C), pero puede mojarse los pies con otro idioma o idiomas.

Antes de que te des por vencido, te recomiendo encarecidamente que pruebes lenguajes de alto nivel para que puedas experimentar y, con suerte, encontrar tu paso. Un idioma con una fuerte comunidad en línea sería excelente para comenzar. Podrá hacer preguntas y desarrollar una buena comprensión de los conceptos básicos que son comunes a todos los lenguajes de programación. Luego, puede volver a C / C ++ y trabajar en el hardcore.

Hay una razón por la que la mayoría de las bibliotecas criptográficas están escritas en C: encontrará que solo un lenguaje de bajo nivel puede darle la cantidad de control que necesitará para implementar bibliotecas seguras que resistan ataques comunes como el análisis forense de memoria. No tendrá que ser un experto en C / C ++, pero le servirá su conocimiento y comprensión de sus fortalezas y debilidades.

¡Buena suerte!

La siguiente respuesta considera la criptografía como un área de investigación en informática teórica. Si por “entrar en la criptografía” te refieres a adquirir las habilidades para involucrarte en la seguridad en la industria tecnológica, esta respuesta no será relevante.

Si desea hacer una investigación en criptografía considerada como un área en informática teórica, no necesita programar. Todo es matemática, al igual que la teoría de la complejidad. Los generadores de funciones / números pseudoaleatorios, las funciones unidireccionales, las primitivas de cifrado de clave pública, etc., se investigan utilizando matemáticas.

Te voy a dar un ejemplo. La siguiente es la definición de un generador de números pseudoaleatorio.


Deje que [math] G: \ {0,1 \} ^ * \ to \ {0,1 \} ^ * [/ math] sea poly-time computable, donde if [math] \ alpha \ in \ {0,1 \} ^ n [/ math] entonces la longitud de [math] G (\ alpha) [/ math] es [math] l (n) [/ math] para alguna función inyectiva uno a uno.

Decimos que [math] G [/ math] es un generador de números pseudoaleatorio si para cada distintivo [math] D [/ math] – un algoritmo probabilístico de poli-tiempo con entrada [math] \ alpha \ in \ {0, 1 \} ^ * [/ math] y salida [math] 0 [/ math] o [math] 1 [/ math] – se cumple lo siguiente:

Sea [math] p_D (n) [/ math] la probabilidad de que si [math] \ alpha [/ math] se elija aleatoriamente entre [math] \ {0,1 \} ^ n [/ math], entonces [math ] D [/ math] acepta (es decir, genera [math] 1 [/ math]) [math] G (\ alpha) [/ math].

Sea [math] r_D (n) [/ math] la probabilidad de que si [math] \ alpha [/ math] se elija al azar de [math] \ {0,1 \} ^ {l (n)} [/ math ], luego [math] D [/ math] acepta (es decir, genera [math] 1 [/ math]) [math] \ alpha [/ math].

Entonces, para cada [matemática] c [/ matemática] y suficientemente grande [matemática] n [/ matemática], [matemática] \ left | p_D (n) -r_D (n) \ right | \ leq \ frac {1} {n ^ c} [/ math].

¡Todo es matemática! El generador de números pseudoaleatorios está tratando de expandir la longitud de las cadenas de 0 y 1, y el distintivo intenta adivinar si una cadena dada se generó de forma pseudoaleatoria a partir de una semilla elegida al azar, o si fue elegida directamente al azar. ¡Muy divertido!

Aquí hay un gran libro para comenzar a aprender criptografía con: Fundamentos de la criptografía – Volumen 1. Si “simplemente ama las matemáticas, así de simple”, podrá disfrutar de este libro y aprender mucho.

Sin embargo, estoy seguro de que querrás implementar algunas construcciones criptográficas en algún lenguaje en algún momento. ¡La programación es divertida! Trate de encontrar un amigo entusiasta del departamento de CS para ayudar a cambiar el sentimiento de “la programación por otro lado nunca ha sido un amigo mío”.

¡Buena suerte!

Los analistas de criptas no tienen que ser programadores.
Bueno, necesitará una comprensión básica de cómo funciona un compilador o cómo la criptografía es una parte muy esencial de una imagen más amplia en estos días, y la seguridad y la privacidad de la información son las principales preocupaciones para las personas y las empresas de todo el mundo.
Deberá tener una buena comprensión de las estructuras de datos y los algoritmos, ya que trabajará en ellos.
Pero no lo hago si tienes que escribir código desde cero.
Como se le ha presentado a C ++, Java y Python, le digo que debe tener una buena cantidad de conocimiento de los conceptos de POO y sus estructuras de datos.
Y, un poco de conocimiento de programación no ha perjudicado a nadie, ya que siempre existe la posibilidad de que tengas que supervisar a alguien de los proyectos.
Así que adhiérase a los principios genéricos de programación ahora mismo Una vez que tenga una base sólida, puede seguir adelante y aprender los detalles de los idiomas cuando sea necesario.
Los programadores no, más bien no pueden dominar todos los lenguajes de programación que conocemos. Pero la idea detrás de cada idioma sigue siendo más o menos la misma.
Para resumir, concéntrese en matemáticas aplicadas y temas como teoría de la computación, estructuras de datos y algoritmos y cualquier otra cosa que se le ocurra.
Encuentre personas con intereses similares y con un conjunto de habilidades similar o nuevo. Y comienza a trabajar en algunos proyectos reales.
¡Buena suerte!

More Interesting

¿Por qué la función gamma está diseñada de tal manera que su argumento se desplaza hacia abajo en 1 en comparación con la función factorial para enteros positivos?

¿Puede una inteligencia computacional observar una ley física incontestable?

Si desmantelo un cubo de Rubik y luego lo vuelvo a montar de todas las formas posibles, ¿cuántos cubos distintos de Rubik son posibles?

¿Qué significa cuando una función es seguida por la notación big-O?

¿Por qué Matlab no le permite llamar a las funciones dos veces o indexarlas como en f (x) (y)?

¿Las matemáticas son muy difíciles en un programa BCA?

¿Cómo es tomar X en Y College ?: ¿Cómo es tomar 6.856 (Algoritmos aleatorios) en MIT?

Cómo usar plantillas y vectores en C ++

¿Cómo funciona el software de ajuste de curvas? ¿Cuál es el proceso automático que ajusta una línea compleja en un gráfico a una serie de puntos de datos?

¿Cuál es el significado del Lema Hardcore de Impagliazzo?

¿Qué es un buen algoritmo para convertir un número decimal de coma flotante con muchos, muchos decimales en el equivalente binario?

¿Qué trabajos puedo hacer con un título en Matemáticas e Informática?

¿Hay algún algoritmo del orden O (sqrt (n))?

¿Qué debo saber sobre las matemáticas combinadas con el desarrollo web (programación)?

Tengo un profundo interés en las matemáticas y la informática. Los cursos ofrecidos en M.Tech en Matemáticas y Computación en IIT-D me parecen muy interesantes. ¿Debo seguir este curso a pesar de la facultad?