SoloCodigo

Informática en general => Seguridad y Criptografía => Mensaje iniciado por: elusuario en Miércoles 28 de Octubre de 2009, 02:25

Título: duda de un principiante
Publicado por: elusuario en Miércoles 28 de Octubre de 2009, 02:25
Hola, estoy empezando a leer articulos sobre criptografia y hay un par de cosas que todavia no entiendo. Se que son 2 preguntas tontas, pero no encontre un lugar que me las respondiera claramente:

1.- Que es exactamente una clave de cifrado?
2.- Por que es necesaria? No es suficiente con el algoritmo?

Saludos y gracias.
Título: Re: duda de un principiante
Publicado por: m0skit0 en Miércoles 28 de Octubre de 2009, 23:13
Si sólo tuvieras el algoritmo, ¿cómo cifras algo para que otro no lo descifre si el algoritmo es conocido por todos?
Título: Re: duda de un principiante
Publicado por: su - en Miércoles 28 de Octubre de 2009, 23:45
Lo unico que se estaria haciendo es codificar el texto, la clave es objetivamente lo que da la seguridad... para entender mejor esto te sugiero revisar el metodo de cifrado de Vigenere (http://en.wikipedia.org/wiki/Vigenere_cipher).
Aqui explican mejor el concepto (http://es.wikipedia.org/wiki/Encriptacion)
Título: Re: duda de un principiante
Publicado por: Nebire en Jueves 29 de Octubre de 2009, 17:05
Cita de: "elusuario"
Hola, estoy empezando a leer articulos sobre criptografia y hay un par de cosas que todavia no entiendo. Se que son 2 preguntas tontas, pero no encontre un lugar que me las respondiera claramente:

1.- Que es exactamente una clave de cifrado?
2.- Por que es necesaria? No es suficiente con el algoritmo?

Saludos y gracias.

1 - Una clave de cifrado es el 'molde' que se ha utilizado para el cifrado y luego para descifrarlo. En la respuesta a tu 2ª pregunta lo verás más claro con el sencillo ejemplo propuesto.

2 - Imagina un texto como 'Todos los días me levanto a las 7' queremos cifrarla. supongamos que nuestro algoritmo es extremadamente sencillo y lo único que hace es alterar el orden de las letras, cada x letras la siguiente adelanta a dichas... por tanto nuestra clave de descifrado se reduciría a una cifra, x. X es la clave para descifrar el texto codificado. Si la clave elegida es 3, el texto anterior una vez cifrado sería: 'oTodos lis dmas ee ltvan o a las 7'  para que se vez claro, primero marco las letras implicadas: 'Todos los días me levanto a las 7' , por tanto para 'descifrar' el texto codificado necesitamos la clave, que en nuestro caso es el carácter '3', que el algoritmo debe utilizar para hacer reversible el texto cifrado.
La clave es necesaria porque de ese modo podemos ofrecer más seguridad variando la clave, si nuestro algritmo no dispusiera de clave significa que o bien laclave es única y fija (imagina que todos los textos cifrados lo fueran con la clave '3' de nuestro algoritmo) o bien la clave está oculta en el propio texto cifrado.

En este último caso significa que hay una clave única (inbuída en el algoritmo) que oculta la clave dentro del propio texto cifrado. Estos casos suponen una evidente falta de seguridad al ser exclusivamente dependientes del algoritmo. Aparte con éste último si el texto cifrado es interceptado, puede ser manipulado y no podríamos siquiera saber que ha sdo remplazado... capto el texto cifrado y lo sustituyo por otro, que yo he cifrado como la clave es universal, el que lo recibe lo descifrará igualmente pero el contenido descifrado no es el original. Al requerir una clave si el texto cifrado es interceptado y remplazado por otro al yo intentar descifrarlo resultará ilegible (usando mi clave correcta), con lo que puedo hacer otras cosas: informar, reclamar un nuevo envío más seguro,etc...
Título: Re: duda de un principiante
Publicado por: elusuario en Martes 3 de Noviembre de 2009, 05:27
Gracias por tu respuesta Nebire, fue muy explicativa.

Podria decirse como conclusion que la clave sirve para agregarle seguridad al algoritmo y para verificar la autenticidad del mensaje?

Saludos.
Título: Re: duda de un principiante
Publicado por: Nebire en Miércoles 4 de Noviembre de 2009, 01:10
No es exactamente así. Eso son consecuencias, aunque de hecho se aprovechan también para eso. La clave sirve para cifrar y descifrar el mensaje , punto. Luego, adicionalmente o de modo implícito '''agregarle seguridad al algoritmo y para verificar la autenticidad del mensaje''' son consecuencias, pero que pueden explotarse a propósito.
Si es cierto que las claves se idearon-inventaron con ese propósito (agregarle seguridad al algoritmo y para verificar la autenticidad del mensaje), sin embargo una vez hecho el algoritmo, no se puede prescindir de la clave, por tanto la clave es necesaria para cifrar y es (salvo que se diseñe el algoritmo expecíficamente de otro modo) también necesario para descifrar el mensaje.

El otro día estuve editando un artículo en wikipedia, concretamente versaba sobre transposición, échale un vistazo, el artículo es 'Escítala'. Verás que el cifrado utiliza una clave no a la moderna usanza, pero que está sobreentendida en el método usado. Traducido a un algoritmo la clave es un valor numérico.

Imagina una máquina que fabrica vasos de cristal... esa máquina es como un algoritmo de cifrado. Un vaso es un mensaje cifrado, la clave serían las especificaciones del vaso: volumne 10 cm cúbicos. Radio menor= 30 mm, radio mayor= 35 mm. altura= 65mm. grosor=.....  el mensaje sería el material en bruto : Material= vidrio, podría ser barro, podría ser cerámica, aluminio, etc... que es lo que se transforma... Este ejemplo no es totalmente acoplable, pero espero que si entiendas la idea de los parámtros que necesita la máquina para procesar el material, esos parámetros equivalen a la clave...

Imagina una máquina que no requiere parámetros, simplemente le pones el material y listo ella lo procesa, todos los vasos serían equivalentes... imagina otra máquina que tiene un selector, cada selector corresponde con un prototipo, por tanto la clave está inbuída en el algoritmo (la máquina tienes las especificaciones de cada uno de esos prototipos) y por tanto la clave en este caso se resume en reconocer el prototipo usado, el resto de datos residen en la propia máquina. Imagina que dicho selector de prototipos fuera intercambiable, entonces el propio selector sería una clave, habiendo varios selectores, necesitaríamos 2 datos, el selector usado y el prototipo elegido en dicho selector, cada selector tiene la 'firma' de todos los prototipos de vasos que se pueden seleccionar en él.
Título: Re: duda de un principiante
Publicado por: elusuario en Miércoles 4 de Noviembre de 2009, 05:08
Nebire, en tu mensaje previo, decis "La clave sirve para cifrar y descifrar el mensaje, punto" y luego "Imagina una máquina que no requiere parámetros, simplemente le pones el material y listo ella lo procesa, todos los vasos serían equivalentes".

A esto pregunto: cual es el problema de que todos los mensajes sean cifrados/descifrados mediante un algoritmo sin clave, siempre y cuando el algoritmo no sea conocido?

Saludos.
Título: Re: duda de un principiante
Publicado por: F_Tanori en Miércoles 4 de Noviembre de 2009, 10:43
No soy experto en esto;


Mira si tienes un cofre y lo cierras con un candado (http://aplicacionesutiles.com/wp-content/uploads/2009/05/candado.jpg) ese cofre lo enviaras por paqueteria a otra ciudad, tu tienes la llave y tambien el destinatario en la otra ciudad, para que pueda ver lo que contiene el cofre, los mensajeros no tiene a llave por lo tanto no podra abrir el cofre, (al menos un cerrajero  :devil: que quebrantara la seguridad)


Ahora... existen llaves publicas y llaves privadas....


Cita de: "elusuario"
A esto pregunto: cual es el problema de que todos los mensajes sean cifrados/descifrados mediante un algoritmo sin clave, siempre y cuando el algoritmo no sea conocido?
Saludos.

Seria como hacer un candado que se abra con una llave, que el dia que esa llave sea 'copiada', el algoritmo deja de funcionar, pues sera corrompido en todos los casos.

Suponiendo La siguiente situacion:

Tienes 15 clientes donde le instalas un sistema en el cual le haz aplicado un algoritmo propio (todo muy bien), tienes un empleado que es desarrollador y despues de un tiempo deja de trabajar para ti, el cual conoce el algoritmo, pero ahora ofrece los servicios que tu ofreces a tus mismos clientes por un precio menor, pues el sabe abrir el sistema, ya que todos funcionan igual, basado unicamente en el algoritmo. sin una clave para cada caso (que le diera versatilidad/dinamismo) y como dice su- Objetividad,

En cambio si tienes una clave por cliente (un candado con su llave) esta persona tendria que decifrarlos todos, conociendo el algoritmo le ayudaria, pero no seria lo unico necesario. Pues cada cliente tendria que llevarse su tiempo en quebrantarle la seguridad.

y si periodicamente le cambias la clave a los clientes pues se la complicas mas cada cierto tiempo multiplicado por el numero de clientes pues.... :rolleyes:


es un ejemplo sencillo, pero los casos pueden ser muchisismo.


Saludos
Título: Re: duda de un principiante
Publicado por: su - en Miércoles 4 de Noviembre de 2009, 21:15
Cita de: "elusuario"
Nebire, en tu mensaje previo, decis "La clave sirve para cifrar y descifrar el mensaje, punto" y luego "Imagina una máquina que no requiere parámetros, simplemente le pones el material y listo ella lo procesa, todos los vasos serían equivalentes".

A esto pregunto: cual es el problema de que todos los mensajes sean cifrados/descifrados mediante un algoritmo sin clave, siempre y cuando el algoritmo no sea conocido?

Saludos.
Porque, sin clave solo codificas... seria como hacer un zip y ponerle extension .mp3, ante un novato el mp3 esta encriptado/corrupto, pero ante un experto (que no soy yo  :( )...

Ya viste lo links que puse? Ahi hablan de un exploit, donde un analista mira la frecuencia con la que sale las letras, un poco de matematicas y bang, y eso es mucho mas facil si no se tiene una clave.
Título: Re: duda de un principiante
Publicado por: Nebire en Sábado 7 de Noviembre de 2009, 09:28
Cita de: "elusuario"
A esto pregunto: cual es el problema de que todos los mensajes sean cifrados/descifrados mediante un algoritmo sin clave, siempre y cuando el algoritmo no sea conocido?
Saludos.
Perdona que tarde en contestarte pero llevo un par de semanas con escaso tiempo libre...

Básicamente, ya te han contestado los compañeros... no obstante me extiendo para que te 'florezcan' idean bullendo en el cerebro y esperando que lo encuentres interesante....

Un algoritmo sin clave no es otra cosa que un algoritmo que dentro de si encierra las 'claves' de su funcionamiento, y donde no queda nada fuera de él, por tanto, es sólo cuestión de tiempo que o bien se desemsamble el código o bien que se analicen los mensajes cifrados con mensajes conocidos. En la práctica puede y suele recurrirse a una mezcla de ambas técnicas para reventar el algoritmo. Una vez roto el algoritmo el mismo carece de utilidad práctica y a lo sumo, sólo, puede ofrecer ya interés 'cultural'.

Un algoritmo sin clave no obstante tiene su campo de utilidad y no es totalmente inútil. Simplemente se trata de conocer los escenarios donde esto resulta práctico. De un modo resumido el escenario clásico para estos algoritmos son 2, uno es aquel en el que la transmisión del mensaje no resulta interceptable (o difícilmente interceptable), imagina la correspondencia postal entre 2 amantes... por ejemplo. Y otro escenario es aquél donde el objetivo no es realmente mantener cifrado un mensaje sino cólo velado... un ejemplo práctico de esto es por ejemplo los pasatiempos de una revista de ocio, donde se necesita que la respuesta esté velada a la vista, pero que a la vez pueda resolverse sin gran dificultad, en esto ejemplo yo puedo enfrentarme a un rompecabezas y si cansado de no resolverlo quiero ver cual es la respuesta, puedo de un modo fácil hallar la misma que aparece a la vista. Un algoritmo de este tipo es el ya  clásico Rot13 (guglea un poco para ver detalles de su simplicidad y su practicidad, basado en una simple sustitución reversible.

Pueden crearse:
1 )  algoritmos sin clave en la forma, que la clave no requiera ser transmitida más que una única vez.
2 ) Así mismo pueden crearse algoritmos en los que se requiere clave, pero que no requieran transmitir la clave.
3 ) También pueden crearse algoritmos en los que la clave es de 1 sólo uso y no requiere ser enviada previamente al destinatario.
Muchos de estos algoritmos se creran exclusivamente para una tarea o tiempos determinados, por lo que su fuerza reside entre otras cosas en que no se desarrolla una gran cantidad de mensajes con el facilitar un estudio para intentar y lograr la rotura del algoritmo, en otros casos sólo importa que el algoritmo no sea roto en un plazo dado, luego ya no importa.
Voy a disertar brevemenete de por donde andan las ideas de estos algoritmos:

1 - Un algoritmo que requiere clave pero que sólo se transmite una vez, típicamente no contiene 1 única clave si no una tabla de claves. La fuerza del algoritmo radica en que no se necesita contínuamente enviar claves, de hecho al hacerlo una única vez el envío de la clave puede dotársele de fuertes medidas de seguridad, la tabla de claves se envía antes de enviar ningúnmensaje si la tabla es interceptada no se utiliza y se envía otra tabla. Una vez la tabla en poder del/los destinatarios (normalmente en estos casos los destinatarios son estáticos y de alguna manera sino conocidos si reconocidos), es cuando puede utilizarse el algoritmo. El mensaje cifrado provee un sistema para determinar que clave de la que tiene la tabla debe emplearse ó puede haber un modelo prefijado de antemano para usar las claves de la tabla, por ejemplo basado en la fecha de emisión del mensaje cifrado podría determinarse que clave se utiliza, o quizás el tamaño del mensaje módulo x o de modo más simple empezando por una y luego correlativas.
En este sistema la tabla de claves no es por sí missma un sistema totalmente abierto, las claves pueden tener tamaños irregulares y pueden lerse vertical, horizontal diagonalmente o a saltos, etc... incluso una selección cuasi aleatoria que se sugiere en base a interpretar una parte del mensaje cifrado. esto es cuando recibo el mensaje cifrado ejecuto el algoritmo recoge el mensaje y me arroja unos valores, esos valores pueden corresponder con filas y columnas que determinan los valores (consultando la tabla) que se deben introducir para descifrar el mensaje.

Un escenario de estos tipos de algoritmos son como se indicaba más arriba usos determinados o determinados por el tiempo. Por ejemplo en un escenario de guerra, se desea enviar órdenes desde el alto mando a una avanzadilla, un posible mensaje podría ser 'atacar si está presente el general. Retirarse en caso contrario.' esta orden puede tener una validez de posiblemente 1 día 1 semana, después de ese tiempo ( es decir después de haber atacado o haberse retirado) ya no importa que se descifre el mensaje, si la tabla de claves se creó específicamente para una misión y esta ha durado una semana será difícil que sea resuelto el sistema  en ese plazo... para una próxima misión la tabla será distinta y posiblemente el algoritmo también.

2 - Hay algoritmos que requieren clave, pero que no necesitan ser enviadas. Este tipo de algoritmos están orientados hacia un lugar en el que existe un clima de confianza. el mejor modo de entenderlo es exponer un ejemplo del escenario, supongamos que tenemos una pequeña empresa tecnológica, nuestra labor se desarrolla en un ambiente de bolsa, somos conscuientes de que podemos ser espiados en todo momento, nuestros mensajes pueden ser interceptados con relativa facilidad pero aún así necesitamos enviarnos mensajes, uno está en Copenhague y otro en Tokyo: un mensaje cifrado tiene por contenido 'compra 500.000 acciones de Lunex, a no más de 5.5', junto a éste mensaje cifrado acompaña este mensaje no cifrado: ' ¿ te reservo mesa para el viernes en Silos ? '. aparentemente no guarda relación el mensaje cifrado con el mensaje abierto, en realidad nos está recordando que clave debemos usar, una clave podría ser: 'Silos cerró el año pasado' aunque esto resulta obvio dentro de las opciones posibles, en cualquier caso es indiscutible que está relacionado con un supuesto local llamado Silos, tal vez simplemente no esté rememorando un hecho que tanto él como yo vivimos, no existe clave como tal sólo yo puedo descifrar el sentido de ese mensaje, la clave no consta en ningún sitio nu ha sido transmitida... Imaginemos por un caso para nuestro ejemplo que ese loca no existe, existe otro llamado de cualquier manera, donde se les atendió mal y tuvieron que irse a otro local, luego allí bromeaban con que si el local debería llamarse "SI LO Se no vengo...' e imaginemos que a consecuencia de ese acontecimiento el que estáen copenhage conoció a su mujer 'Margarita', entonces la clave puede simplemente ser esa... el que recibe el mensaje no necesita clave explícitamente porque tiene capacidad para interpretar el mensaje y deducir la clave, otro ojos mirando les resultará imposible deducir que algo que simplemente no guarda coherencia para aquellos que no vivieron ese momento.

Este escenario es el que dió lugar a la clave pública y la clave privada, es el escenario más arriesgado, aquél donde tu mensaje puede y posiblemente será interceptado, como esto mismo supone un gran riesgo se impone un sistema especialmente fuerte y resistente. Naturalmente pueden diseñarse todavía algoritmos más sencillos para escenarios similares donde no haya en juego 'secretos de empresa'... y donde la clave publica y la clave privada sean en la forma:  ¿ te reservo mesa para el viernes en Silos ? ' .

3 - Hay algoritmos que donde la clave es de 1 sólo uso, la eficacia de éste sistema es que no requiere memorizarse por lo que no se pone en riesgo a la persona ante posibles amenazas. Actualmente la mayoría de algoritmos de este tipo son para hacer login en alguna parte, más que para descifrar un contenido, aunque paulatinamente es de prever que esto se extienda, dado el problema que supone hoy día memorizar 500 contraseñas para todo.
Los algoritmos con los que se está más familiarizado es con los conocidos como Captcha, que son una simple verificación para evitar robots. Los bancos han empezado a usar también algoritmos de este tipo para evitar riesgos a sus clientes.

.....

En cualquier caso lo que debe quedarte claro es que la fuerza de un algoritmo debe recaer en la clave y no tanto en el algoritmo. La seguridad se sustenta en ese hecho. La seguridad basada en un algoritmo sólo resulta eficaz cuando no hay forma de disponer de 'copias' del algoritmo. Imagina una comunicación entre tu y yo, nuestro algoritmo puede llegar a ser incluso bastante simple comparado con lo existente, pero si nos pasamos los mensajes cifrados por mail, yuna vez en el poder del otro lo tomamos y los ciframos desciframos desde otro ordenador no conectado a internet que es el que tiene el algoritmo, la seguridad resulta bastante elevada, en cambio si el algoritmo es accesible, la seguridad decáe en picado... por eso la seguridad conviene que recaiga en las claves, esto lo independiza bastante de la fuerza del algoritmo que sabemos no son inviolables, cualquiera con los suficientes conocimientos de ensamblador puede destripar un algoritmo, naturalmente requiere su tiempo, pero se le supone al caso que si hay interés eso no va a faltar, a base de tener más gente metido en ello, amén de programas que 'deducen' gran parte de lo que se está haciendo... al respecto algoritmos creados en código 'espagueti' resultan más difíciles que si están programados estructuralmente...