Latest Posts:

Mostrando las entradas con la etiqueta criptografia. Mostrar todas las entradas
Mostrando las entradas con la etiqueta criptografia. Mostrar todas las entradas

15 de diciembre de 2018

Arthur Scherbius, creador de «Enigma», la máquina de encriptar de los alemanes

Murió sin conocer el uso militar que se le daría a su invento.


Una de las personalidades que indirectamente tuvieron una influencia capital en la Segunda Guerra Mundial fue Arthur Scherbius, el padre de la máquina criptográfica Enigma. Ésta, usada inicialmente por la Marina alemana, la Kriegsmarine , fue posteriormente adoptada por todas las fuerzas armadas germanas para el encriptado y codificado de sus comunicaciones secretas, principalmente las instrucciones a los submarinos que, en «manadas de lobos», libraban una lucha capital en alta mar por interrumpir el tráfico marítimo y el sistema de convoyes hacia el Reino Unido.

Considerada imposible de desencriptar, la historia de la ruptura de sus claves, conseguida finalmente en el Reino Unido gracias a la labor desarrollada anteriormente por un equipo de matemáticos y criptólogos polacos, es una de las historias secretas más espectaculares de la Segunda Guerra Mundial.

Ingeniero eléctrico, Scherbius dirigió su máquina criptográfica al sector civil y murió sin conocer la dramática influencia que su invento tuvo en el desarrollo de la guerra.

Fuente: ABC (España)

2 de octubre de 2013

Criptografía: Entre el lenguaje y las matemáticas



Durante los últimos años, se ha hablado mucho sobre la seguridad en Internet y los peligros que tiene enviar tus datos. La solución que nos ofrecen: encriptar. Las páginas de los bancos, o de comercio electrónico, vienen encriptadas (lo distinguiréis porque en la barra de la dirección, en vez del típico http, veréis https). Pero ¿Sabemos realmente qué es la encriptación?¿En qué consiste?
Teoría clásica de la comunicación y encriptación
Una visita a la wikipedia ya nos deja una definición bastante exacta: "Criptografía (del griego κρύπτω krypto, «oculto», y γράφως graphos, «escribir», literalmente «escritura oculta») tradicionalmente se ha definido como la parte de la criptología que se ocupa de las técnicas, bien sea aplicadas al arte o la ciencia, que alteran las representaciones lingüísticas de mensajes, mediante técnicas de cifrado y/o codificado, para hacerlos ininteligibles a intrusos (lectores no autorizados) que intercepten esos mensajes."
Para entender bien la definición, primero hay que entender como se produce la comunicación de un mensaje:

Como vemos, en todo mensaje hay un emisor (emite el mensaje), un receptor (quien lo recibe), un canal por el que se envía el mensaje y un código. El código es el sistema común que hace que el receptor entienda el mensaje. Un ejemplo clásico es el propio idioma, que es comprensible por aquellos que lo hablan. En el código es donde entra en marcha la criptografía. De hecho, cuando alguien habla en un idioma que desconocemos, en cierta manera están hablando de forma "cifrada" para nosotros. Este no es un hecho menor, dados casos como el del ejercito norteamericano, que usaron Indios Navajos como operadores de radio, para que los Japoneses no se enteraran de las conversaciones. Pero el objetivo de la criptografía es obtener un método genérico de encriptado, independiente del idioma. Hoy en día, este sistema no tendría mucho éxito, dada la cantidad de buenos traductores que hay por Internet.
Imaginemos un Capitán que quiera enviar información a un General que se encuentre lejos, y teme que al mensajero le atrapen las tropas enemigas. Si leyeran ese mensaje, sería fatal para ellos, pues podrían enterarse de sus planes. Así que lo mejor es escribirlo cifrado.
Los principios: el cifrado de "El Cesar"
Ya los antiguos y belicosos romanos se dieron cuenta, como bien decíamos antes, de lo importante que era que el enemigo no pudiera interceptar sus comunicaciones. Pero como ésto era inevitable, crearon el primer sistema de cifrado, conocido como el cifrado de "El Cesar", por ser las tropas del ejercito romano en usarlo. Aunque el nombre técnico sería el de "Cifrado por Trasposición".
Este sistema de cifrado seguía una lógica muy simple: elegías un coeficiente de trasposición (vamos, eliges un número), por ejemplo el 2. Así que lo añadías a las letras del abecedario. De tal manera que sustituías las letras originales, por la letra que se encontraba dos posiciones más adelante. Por ejemplo, sustituías la A por la C, la B por la D, etc...  Para ver un ejemplo, supongamos el siguiente mensaje: "Saludos a todos". Le aplicamos un coeficiente de trasposición 2, con lo que quedaría: "Tcnwfqt c vqfqt". Algo totalmente ilegible e incongruente para alguien que no conozca dicho coeficiente.
Vulnerabilidades
Este sistema de cifrado se mostró altamente eficiente para textos cortos, pero daba problemas con textos largos. Entonces era más fácil descifrarlos. Esto se debía a que realmente seguía manteniendo la estructura propia del lenguaje. Es decir, la palabra "Saludos" siempre se escribiría "Tcnwfqt " con un coeficiente de trasposición = 2. De tal manera que, si el texto estuviera en español, sabremos que la letra que aparece en mayor número de ocasiones es la 'A' (ver Wikipedia: Frecuencia de aparición de letras). Entonces si vemos que en un texto la letra que más aparece es la 'C',  podemos deducir el coeficiente de trasposición. A este método se le llama "Criptoanálisis Estadístico".
Mediante este método, cuanto más largo es un texto, más fácil es obtener una estadística fiable, que con un texto corto. Aún así, conociendo el método, solo es cuestión de paciencia.

Métodos con Claves: Critografía Simétrica y Asimétrica

Dada la importancia de controlar el tráfico de datos, el cifrado ha ido cogiendo gran importancia hasta nuestros días. De esta manera, se ha buscado formas de encriptar que, aunque sean públicos y conocidos, no permitan hacer un simple criptoanálisis estadístico para obtener el mensaje deseado.
La idea inicial del cifrado es el uso de una palabra clave conocida solamente por el emisor y el receptor (deseado, claro. El que reciba el mensaje va a ser un receptor, pero éste sólo será informativo si es capaz de decodificar la información que el mensaje contiene). De esta manera la palabra clave serviría para encriptar y desencriptar la información.
Una forma sencilla usada en el siglo XVII, fué una variante del método de trasposición. Asignemos un número a cada letra del abecedario, de tal manera que la A = 001, la B = 002, etc... Ahora cojamos el texto: "Saludos". Y elegimos como palabra clave ABETO. Si en vez de escribirlo con palabras, lo pasamos a números, el texto quedaría: '022001013024005018022' y la palabra clave sería '001002006023018'.
Ahora cogemos ambos códigos numéricos y los ponemos uno encima del otro, en grupos de tres, sumando el primer código de la primera letra del texto a la primera letra de la clave, y así, sucesivamente. En caso de que la clave no llegue a cubrir la longitud del texto, la repetimos, hasta donde haga falta...
022 001 013 024 005 018 022
+
001 002 006 023 018 001 002
======================
023 003 019 047 023 019 024

Como vemos la suma de la letra U, sumada a la letra T, se escapa del alcance del abecedario. Que tiene un total de 29 letras (Ver Método DIMQV, que se está tomando como base en este ejemplo, aunque pudiera no ser del todo exacto). En este caso, lo más sencillo es restarle 29 a 47, que daría 18. De tal manera que el texto cifrado quedaria: "TCPOTPU". Cuando se recepcionara el texto, solo tendríamos que hacer la operación inversa para obtener la clave final. Este ejemplo es muy sencillo, dado que hemos asignado simplemente números a las diferenes letras y hemos hecho una simple suma. Los sistemas actuales usan complejas ecuaciones para que el cifrado sea más efectivo.
Este sería un ejemplo de lo que se conoce como Criptografía Simétrica, o de una sola clave. La mayor parte de los sistemas de encriptación actuales están basados en sistemas de Criptografía Asímetrica, de llave pública y llave privada, en la que el programa crea una clave privada (de forma autónoma) que no es conocida más que por él (mediante sistemas matemáticos de cálculo) y el usuario introduce una clave alfanumérica (es decir, formada por números y letras, así como caracteres especiales, como la @ o la #) que puede dar a otras personas (llave pública).
En todos los programas informáticos que se usan actualmente (en webs o en Windows), las contraseñas van encriptadas con Criptografía Simétrica, en ficheros, que después son leídos para hacer la comparación pertinente. En sistemas Unix usan sistemas que llaman de "one way encription", encriptación de una sola vía, que se trata de sistemas de encriptación que no se pueden desencriptar.
Fuente:

5 de abril de 2013

Se encuentra el número primo con más dígitos del mundo: más de 17 millones


Los números primos de Marsenne, que llevan el nombre del monje francés Marin Mersenne, se definen por la ecuación N = 2n-1, donde N y n son ambos números primos. Se sabe que 48 números cumplen con esta ecuación. Y se sabe gracias a un proyecto colaborativo internacional que se llama Gran Búsqueda en Internet de los Primos Mersenne (GIMPS). Fundado en 1996, GIMPS ha encontrado los últimos 14 primos de Mersenne. En el proyecto están participando unas 360.000 computadoras que, juntas, son capaces de realizar hasta 150 billones de cálculos por segundo. 


Curtis Cooper, de la University of Central Missouri, ha confirmado el descubrimiento de un nuevo primo de Mersenne, que hace el número 48 de la lista actual de este tipo de números primos. Tiene 17425170 cifras (sobrepasando así en casi 5 millones el número de cifras del primo de Mersenne número 47 de la lista).

Cooper recibirá 3.000 dólares por su hallazgo. Pero premios mucho mayores están a la espera del que encuentre un primo con cien millones de dígitos o con mil millones de dígitos (150.000 y 250.000 euros, respectivamente).

¿Por qué son tan importantes los números primos de Marsenne? Porque son muy raros, porque suponen un gran desafío. Y también se emplean últimamente en criptografía.

Vía | ABC


Tomado de:

Xakata Ciencia

10 de noviembre de 2012

Criptografía: herramientas esenciales para una informática privada y anónima

Un sistema anónimo ofrece la capacidad a los individuos para revelar su identidad sólo cuando lo deseen; esta es la esencia de la privacidad. Asimismo la privacidad en una sociedad abierta requiere la criptografía. — A Cypherpunk’s Manifesto

En una sociedad como la nuestra, transformada en red cuasi-infinita de entidades comunicantes, donde la privacidad y el anonimato son una mera ilusión escondida tras el cómputo en la nube, la criptografía es el único camino seguro. Desafortunadamente, el tema permanece oscuro para la mayoría de los usuarios de la red: ignoramos por qué es importante tener privacidad y anonimato, e ignoramos que existen herramientas —muchas de ellas libres— que nos proporcionan esos derechos.

No tenemos que ser expertos en álgebra superior para ayudarnos de la criptografía porque cada vez contamos con más y mejores herramientas que la proveen. He aquí algunas de ellas; recomiendo combinar dos o más de ellas según el contexto. Obvio, existen otras herramientas: recomienda o comenta tu experiencia con ellas.

 Tor Browser Bundle

Tor es la herramienta definitiva para el anonimato en la red. La sencilla instalación de Tor Browser Bundle te permitirá navegar por la red de forma anónima, aunque a costa del desempeño. En Android puedes usar Orbot.

 Cryptocat

Instala el complemento para tu navegador favorito y podrás llevar conversaciones privadas (porque la comunicación va cifrada) y ahora también anónimas (usa el protocolo OTR). Pidgin con OTR te servirá igual para todos los protocolos de chat (incluso Messenger).

 N-1

Donde las redes sociales tradicionales (dígase Facebook) son verdaderas máquinas de vigilancia explícita (los datos de los usuarios) e implícita (todas sus conexiones), una red social libre y descentralizada como N-1 llega a salvar el día. Entre otras características interesantes, es posible enviar mensajes cifrados.

 Ubuntu 12.10: Full Disk Encryption

La última versión de Ubuntu permite fácilmente cifrar todo un disco duro desde el instalador principal (antes lo hacía desde el instalador alternativo). Esto es protección desde la misma base. Por su parte, TrueCrypt es la opción en todos los sistemas operativos.

Thunderbird + Enigmail

Thunderbird es un cliente de correo electrónico de la familia Mozilla. Enigmail, el complemento que permite el envío cifrado de correos electrónicos, correos que sólo deben ser vistos por su destinatario. En equipos ambas herramientas proveen un alto nivel de seguridad.

 OpenVPN

Una VPN es una red cifrada encima de internet. Normalmente se utiliza para crear túneles en la red que permiten acceder a servicios denegados por la red actual al tiempo que ofrece cierto grado de privacidad. Hay muchos servicios VPN en la red, principalmente de paga; entre ellos Hamachi es muy fácil de usar. OpenVPN es gratuito y nos permite crear nuestro propio servicio VPN en casa aunque con cierta dificultad. Spotflux quiere cambiar este paradigma al estar en la nube: aunque hay que confiar en ellos.

HTTPS Everywhere

HTTPS permite transmitir datos cifrados entre tu navegador y el servidor web. HTTPS Everywhere obliga a los servidores, si la hay, a ofrecerte esa opción más segura (aunque no infalible).

Darknets

Cuando todo falla, cuando la comunicación privada y anónima es vital, solo quedan las darknets, esas redes ocultas, paralelas o incluso independientes a internet. La red TOR es una de ellas. Freenet es pionera entre las darknets anti-censura. Pero hay otras que buscan ser alternativas a Internet, independientes y verdaderamente descentralizadas como Project Meshnet, a su vez basado en decenas de proyectos de código abierto. The Serval Project para móviles anda por ese camino, y en combinación con proyectos como CSipSimple puede llegar a ser una red de telefonía móvil independiente y segura.


Una recomendación final: organiza una CryptoParty, sigue el manual y harás muchos amigos. Quizá quieras invertir algunos bitcoins —criptomonedas— en ello.


Fuente:

4 de noviembre de 2012

Criptografía: Matemática para guardar secretos


No soy una persona que tenga mucho que esconder, pero hay cosas que más vale mantener en secreto. Por mi parte, lo típico: el pin del móvil y el de la tarjeta de crédito, las claves del banco, de las cuentas de correo, del ordenador, y poco más. Si alguien llegara a acceder a mi cuenta bancaria, dependiendo del día del mes, igual hasta le tocaba pagar, y en mi cuenta de correo tampoco hay ningún secreto de estado.

Sin embargo, hay secretos de los que dependen cosas mucho más importantes. A nadie se le escapa que la clave del correo de un presidente de gobierno o de un empresario importante es harina de otro costal. Con un poco de información privilegiada, ganar en la bolsa puede llegar a ser un juego de niños (está claro que no hay otra forma de acceder a esa información privilegiada que accediendo ilegalmente a sus correos, porque nadie duda de la integridad de los que manejan esa información ¿verdad?).

El caso es que aquella mañana de Lunes, durante el desayuno, alguien sacó el tema -creo que el sr. Lego- y, por supuesto, a pesar de mis intentos por desviar la conversación a ámbitos más mundanos, Sofía no podía resistir la tentación de enfrascarse en cualquier conversación que oliera a seguridad informática.

Ya, de perdidos al río -pensé- así que traté de volver a entrar en la conversación:

- ¿Os imagináis tener que mantener en secreto algo como los códigos de lanzamiento de unos misiles nucleares?

¡Vaya! Ya está Alberto con sus paranoias -pude leer en la expresión de el Sr. Lego.

Sofía, sin embargo, fue mucho más directa y menos sutil:

- ¡No digas tonterías! ¿tu te fiarías de alguien tanto como para darle las claves de lanzamiento de un misil nuclear? ¿Y si se vuelve loco y le da por desatar la tercera guerra mundial?

- Quizás se podría dividir la clave en varios fragmentos y repartirlos entre varias personas, así nadie sabe la clave completa y nadie puede lanzar los misiles por su cuenta -dije tratando de impresionar a Sofía.

- Entonces, si fuera un país enemigo sólo tendría que matar a uno de los que tienen la clave para evitar que pudiera lanzar los misiles... o bastaría esperar a que a alguno le de un infarto... ¡jaque mate!

- A ver -continuó el Sr. Lego- necesitamos una forma de repartir fragmentos de la clave entre varias personas de forma que ninguna conozca la clave completa, y además, queremos ser capaces de reconstruir la clave si falla una o más de una de las personas que tienen los fragmentos. Me parece que no es posible.

- Pues siento decir que te equivocas -sonrió Sofía.


En criptografía -continuó Sofía- para resolver este tipo de asuntos se utilizan los llamados esquemas de compartición de secretos. Para este caso concreto se utilizan los esquemas de umbral. Por ejemplo, si queremos repartir un secreto entre m personas y que el secreto pueda recuperarse con n personas, hablamos de un esquema de umbral (m,n), donde n es el umbral.

Parar a Sofía a estas alturas, estaba ya fuera del alcance de cualquier mortal, así que mi única salida fue preguntar, no sin cierta resignación:

Vale, pero ¿cómo funcionan esos esquemas?

Sofía apuró el café que le quedaba en el vaso, se detuvo unos instantes como para componer en su cabeza lo que iba a decir, y continuó:

Hay varios métodos, el más sencillo, quizás, es usar el esquema vectorial, introducido por el matemático George Blakley de la universidad A&M de Texas: Si queremos compartir un secreto con un esquema de umbral (m,n) hacemos corresponder el secreto con un punto P del espacio m-dimensional, y los fragmentos serán hiperplanos de dimensión m-1 que tienen a P como punto de intersección. De esta forma, con m hiperplanos, podemos reconstruir el secreto.

- Por la cara del Sr. Lego, hacía rato que ya no seguía a Sofía. Yo, por mi parte tampoco, pero creía que estaba controlando mejor mi expresión facial hasta que Sofía me miró y sonrió con esa sonrisa piedosa del que se sabe muy por encima de su interlocutor.

Está bien -dijo Sofía tratando de simplificar un poco el asunto- imaginemos que quiero compartir en secreto las tres siguientes cifras: 3,10,5. Y lo quiero hacer entre 4 personas, de forma que sólo con 3 pueda recuperar la clave. Como son tres cifras, podemos pensar en ellas como en un punto P(x,y,z) del espacio de 3 dimensiones. Sólo tendríamos que crear 4 ecuaciones como las siguientes.



Si damos una ecuación a cada una de las cuatro personas, ninguna de ellas podrá conocer el valor del punto P(x,y,z). Sin embargo, si cualquiera de ellas tres se reúnen y resuelven el sistema que forman sus tres ecuaciones, habrán conseguido descifrar el secreto P(3,10,5), aunque no esté una de las personas.

Bastante ingenioso -pensé- no se me hubiera ocurrido, y eso que una vez que conoces el sistema, es bastante obvio.

Otro esquema, algo más elaborado -continuó Sofía- es el esquema de Shamir, que inventó el matemático Adi Shamir. Este esquema es conceptualmente bastante simple, aunque su uso implica algo más que resolver un simple sistema de ecuaciones.

Sofía paró un momento como tratando de ordenar toda la información que tenía en la cabeza y seguidamente preguntó:

- Si dibujo dos puntos en un papel, ¿cuantas líneas rectas existen que pasen exactamente por esos dos puntos?

El Sr. Lego y yo nos miramos unos instantes antes de responder al unisono: una.

- Bien -continuó Sofía- del mismo modo que sólo necesito dos puntos para definir una recta, sólo necesito tres para definir una parábola ¿verdad?

Esto ya no era tan obvio, pero haciendo un acto de fe el Sr. Lego y yo asentimos con la cabeza.

En general, necesitamos n+1 puntos en el plano para definir una curva (polinomio) de grado n ¿os lo demuestro? -preguntó Sofía.

Me apresuré a decir que no era necesario antes de que se lanzara a hacer la demostración matemática.

En general -siguió Sofía- si quiero compartir un secreto repartiéndolos en m fragmentos y con un umbral de n fragmentos, tengo que construir un polinomio de grado n-1.

Imaginemos entonces que quiero compartir en secreto el pin de mi tarjeta de crédito que, digamos, es 3254. Y lo quiero hacer entre 4 personas con un umbral de 3. Necesito, por lo tanto, un polinomio de grado 2 (es decir n-1) que tendrá la forma siguiente:



A los términos a0, a1 y a2 los llamamos coeficientes del polinomio. A a0, que es el término independiente, le asignamos el valor del secreto: en este caso a0=3254. Al resto de coeficientes le asignamos valores aleatorios.

Por ejemplo: a1=12 y a2=25. Una vez definido nuestro polinomio, como quiero repartir el secreto entre 4 personas, necesito el valor de cuatro puntos cualesquiera de la función. Por ejemplo:



En este caso hemos escogido los puntos 1, 2, 3 y 4, pero podrían ser cualesquiera.

A cada una de las personas les damos un par con uno de los puntos y el valor que toma la función en dicho punto. Es decir tendríamos los siguientes cuatro fragmentos:

(1, 3291)
(2, 3378)
(3, 3515)
(4, 3702)

Pero según hemos dicho antes, un polinomio de grado n está definido de forma inequívoca por por n+1 puntos, así que como nuestro polinomio era de grado 2, sólo necesitamos 3 de los puntos (fragmentos) para poder reconstruirlo.

La idea está clara -respondí- pero ¿cómo se reconstruye un polinomio a partir de unos puntos?

No te preocupes, Alberto, eso lo resolvió Lagrange hace ya algunos añitos. Podemos usar el polinomio interpolador de Lagrange para obtener el polinomio original, pero ¿realmente necesitamos todo el polinomio original? -nos desafió Sofía.

No, sólo el término independiente del polinomio, que es el que contiene el secreto -respondió el Sr. Lego sorprendiendo a propios y a extraños.

Efectivamente Sr. lego. No voy a entrar en detalles matemáticos, que son un poco aburridos, pero tras jugar un poco con el polinomio de Lagrange, podemos llegar a la siguiente formulita que nos devuelve el término independiente del polinomio.



Siendo las x los puntos y las y los valores que toma la función en dichos puntos.

Como véis, la formulita de marras se puede modelar muy bien con un par de bucles así que es fácil hacer un programa para generar y develar secretos con el esquema de Shamir.

A la vuelta del desayuno, ya en la oficina, Sofía nos envió las siguientes dos funciones para generar secretos y para desvelarlos. Eso sí -nos advirtió- ningún secreto está a salvo para siempre.


  1. from math import ceil
  2. from random import random
  3. def gen_secret(secret, users, threshold):
  4.     out = []
  5.     max_value=100   # valor maximo factores
  6.     n=threshold     # grado del polinomio
  7.     # generar polinomio grado n
  8.     factores=[]
  9.     fragmentos=[]
  10.     factores.append(secret)
  11.     for i in range (1,n):
  12.         t=ceil(random()*max_value)
  13.         factores.append(t)
  14.    
  15.     # generar n fragmentos
  16.     for i in range(users):
  17.         # escogemos punto t de la funcion aleatorio
  18.         t=int(ceil(random()*max_value))
  19.         # calcular valor de f(t)
  20.         v=factores[0]
  21.         for j in range(1,n):
  22.           v=v+factores[j]*(t**j)
  23.      
  24.         fragmentos.append([t, int(v)])
  25.     out=fragmentos
  26.     return out
  27. def recover_secret(fragments, threshold):
  28.     out = 0
  29.     if len(fragments)<threshold:
  30.         print "faltan fragmentos"
  31.     else:
  32.         for i in range(threshold):
  33.             tmp_j=1
  34.             for j in range(threshold):
  35.                 if j!=i:
  36.                     tmp_j=tmp_j*(fragments[j][0]/float((fragments[j][0]-fragments[i][0])))
  37.             out=out+(fragments[i][1]*tmp_j)
  38.     return int(out)
  39. # calculamos 4 fragmentos para secreto 1234 con umbral 3
  40. s=gen_secret(1234,4,3)
  41. # recuperamos el secreto con 3 fragmentos
  42. print recover_secret(s, 3)

Fuente:

google.com, pub-7451761037085740, DIRECT, f08c47fec0942fa0