Dudas sobre cifrados. (Y Rajoy)

Iniciado por OmarHack, 9 Julio 2013, 04:42 AM

0 Miembros y 1 Visitante están viendo este tema.

OmarHack

 Estoy creando un cifrado en C++ y tengo unas cuantas dudas que a ver si me las sabéis responder.

Estoy haciendo un programa que cifrará un código asignándole a cada letra un valor. Para descifrarlo también lo hará el programa.

Ejemplo de lo que haría el programa:
Introducimos el texto "hola". El programa cambia las letras por su valor en una tabla creada por mi, correspondiendo en este caso; h = 1, o =32, l =65,  a=5732425563, por lo tanto "hola" se mostraría así: "1 32 65 5732425563".
Sería muy fácil hacerse con la tabla si la letras siempre valieran lo mismo, pero digamos que h no siempre va a valer 1, ni o va a valer siempre 32, ni l 65 ni a 5732425563. Es más, si vuelvo a cifrarlo todo nada más acabar el cifrado dará un resultado distinto, en cambio el programa si sabrá descifrar el código.

Puestos en situación, ¿cómo se podría descifrar eso? ¿solo decompilando el programa y viendo el logaritmo? ¿como puedo hacer ese programa imposible de "decompilar"?

Otra preunta: ¿Es imposible de descifrar un cifrado asimétrico sin la clave privada aún disponiendo del código fuente del programa que cifra y descifra, clave pública y del logaritmo no?


Planteando algo similar de una forma distinta en un ejemplo clarísimamente hipotético:
Ayer te pasé mi programa. Hoy ves en la tele que secuestraron a Rajoy. Yo te mando mañana un mensaje (cifrado por mi programa) de que voy a matar a Rajoy y que lo tengo secuestrado. Para dar más crédito al asunto te digo su Dni, la hora del secuestro y más datos que ni siquiera los investigadores saben, te paso la clave privada para descifrar ese mensaje y tú me denuncias nada más descifrarlo. Cuando me van a detener me suicido.
Encuentran en mi ordenador miles de mensajes cifrados por mi programa, y su única esperanza para saber donde está Rajoy es descifrarlos, pero la clave privada que te pasé a ti no les funciona. Por desgracia, Rajoy está encerrado en un sitio que solo yo sé.

Ahora las preguntas:
¿Descifrarían algún día algún mensaje?
¿Por qué crees que si/no?
¿Lo harían antes de que Rajoy se muriera deshidratado (pongamos que palmaría en 2 semanas xD)? 

Sé que la respuesta a la mayoría de estas preguntas están por internet (Lo de Rajoy lo dudo xDDDDD), pero prefiero escucharlo de fuentes fiables.

Un saludo y no os cachondeéis mucho. ¿Vale? XD


I like to test things.

engel lex

#1
sobre lo primero busca la magquina enigma, mira comomo funciona y ahí te darás una idea para evitar las tablas fijas...

CitarPuestos en situación, ¿cómo se podría descifrar eso?
con paciencia y conocimiento se puede


Citar¿solo decompilando el programa y viendo el logaritmo?
Algoritmo*
no... muchos los cifrados más potentes son de algoritmo publico (ejemplo AES o RC4)

Citar¿como puedo hacer ese programa imposible de "decompilar"?
no puedes... solo puedes hacerlo más complicado... pero no "imposible"

CitarOtra preunta: ¿Es imposible de descifrar un cifrado asimétrico sin la clave privada aún disponiendo del código fuente del programa que cifra y descifra, clave pública y del logaritmo no?
Algoritmo*
aclaro... a nivel de software dentro de mundo virtual podríamos decir que nada es imposible... dejemoslo en "muy complicado" si no, jamás hubieran crackeado los iphone, ps3, xbox360... etc

si, es muy complicado, justo ese es su punto... el algoritmos sin la clave no sirve de nada, si no, no tendría sentido ponerle clave...

CitarPlanteando algo similar de una forma distinta en un ejemplo clarísimamente hipotético:
XD ten más cuidado cuando usas nombres...

Citarte paso la clave privada
para eso es el asimetrico... tu no conoces la clave privada del otro! XD mira RSA

imaginemos que tu clave privada solo la sabias de memoria...

Citar¿Descifrarían algún día algún mensaje?
sip
Citar¿Por qué crees que si/no?
sony, iphone, windows, xbox?

Citar¿Lo harían antes de que Rajoy se muriera deshidratado (pongamos que palmaría en 2 semanas xD)? 

nada más duraría 5 días en MUY buenas condiciones XD
depende de lo bueno que seas... si es uno de los publicos conocidos de alto grado y la clave lo suficientemente larga... no... (a fuerza bruta por lo menos, puede ser ing social o algo...) pero por cualquier medio es poco probable que duren poco tiempo incluso usando una del top 10 de supercomputadoras

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

OmarHack

Cita de: engelx en  9 Julio 2013, 04:59 AM
sobre lo primero busca la magquina enigma, mira comomo funciona y ahí te darás una idea para evitar las tablas fijas...
con paciencia y conocimiento se puede
La miraré, pensé en usar la fecha y hora actual para asignar valor a las letras e incluirla en el texto cifrado para su posterior desciframiento.
Cita de: engelx en  9 Julio 2013, 04:59 AM
Algoritmo*
no... muchos los cifrados más potentes son de algoritmo publico (ejemplo AES o RC4)
No sabía yo eso. Información muy útil!
Cita de: engelx en  9 Julio 2013, 04:59 AM
no puedes... solo puedes hacerlo más complicado... pero no "imposible"
Tengo que informarme de como. Seguramente en el foro de ingeniería inversa encuentre algo. :P
Cita de: engelx en  9 Julio 2013, 04:59 AM
Algoritmo*
aclaro... a nivel de software dentro de mundo virtual podríamos decir que nada es imposible... dejemoslo en "muy complicado" si no, jamás hubieran crackeado los iphone, ps3, xbox360... etc

si, es muy complicado, justo ese es su punto... el algoritmos sin la clave no sirve de nada, si no, no tendría sentido ponerle clave...
¿Ni idea de como se haría no? Si no es imposible debe rondar algo cercano.
Cita de: engelx en  9 Julio 2013, 04:59 AM
XD ten más cuidado cuando usas nombres...
Jajaja, "clarísimamente hipotético" lo aclara.
Cita de: engelx en  9 Julio 2013, 04:59 AMpara eso es el asimetrico... tu no conoces la clave privada del otro! XD mira RSA

imaginemos que tu clave privada solo la sabias de memoria...
Es lo mismo, yo te pasé el mensaje para que lo descifraras, te digo que te di la clave para que sepas que descifraste el mensaje con la clave que yo te di.
Cita de: engelx en  9 Julio 2013, 04:59 AM
sipsony, iphone, windows, xbox?
No sé no sé, no creo que tengan mucho que ver los métodos de crackeo.
Cita de: engelx en  9 Julio 2013, 04:59 AM
nada más duraría 5 días en MUY buenas condiciones XD
depende de lo bueno que seas... si es uno de los publicos conocidos de alto grado y la clave lo suficientemente larga... no... (a fuerza bruta por lo menos, puede ser ing social o algo...) pero por cualquier medio es poco probable que duren poco tiempo incluso usando una del top 10 de supercomputadoras

Tiene reservas para 2 semanas por lo menos, además atado no hace esfuerzos. xDDD
La verdad es que sería muy complicado.
Cuando acabe de añadirle la segunda capa al cifrado comprobaré cuanto sería el máximo de resultados posibles conociendo el algoritmo. Buscaré el número de operaciones por segundo que puede hacer el ordenador más potente de España y así averiguaré el tiempo aproximado que tardaría en descifrar el mensaje conociendo una palabra del texto a descifrar.

Todas estas preguntas son para informarme más y poder mejorar mi cifrado hasta hacerlo de lo más eficiente que pueda.

Cita de: engelx en  9 Julio 2013, 05:14 AM
...
¿?
I like to test things.

engel lex

ese "..." era duplicado XD lo siento!

CitarNo sé no sé, no creo que tengan mucho que ver los métodos de crackeo.

si, ya que justamente el punto es que sus memorias y procesos estaban cifrados para que aunque accedan a leerlos fisicamente no puedan saber que contiene :P

CitarEs lo mismo, yo te pasé el mensaje para que lo descifraras, te digo que te di la clave para que sepas que descifraste el mensaje con la clave que yo te di.

no XD con RSA tu tienes tu clave privada y publica, yo tengo las mias, tu nunca te enteras de las mias y yo nunca de las tuyas, a demás solo te paso la clave publica XD en todo caso el "pasar la clave privada" se llaman "psk" (pre shared key = clave pre compartida)

busca en wiki sobre los algoritmos...

por otro lado si no fueran públicos no tendría sentido usarlos en la web, ya que entonces solo servirían por ejemplo de los servidores microsoft a navegadores microsoft y el resto que se pudran XD
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

OmarHack

Tengo que informarme mucho más.
En mi caso es para compartir textos, así yo te paso la clave con la que encripte el mensaje tu la pones y listo :P
Llevo 8 horas programando y ya acabé la segunda capa y voy a por la tercera jeje. Va a ser un cifrado muy bueno. :)
Saludos!
I like to test things.

engel lex

CitarPseudocódigo[editar]
Expansión de la clave usando el esquema de claves de Rijndael.
Etapa inicial:
AddRoundKey
Rondas:
SubBytes — en este paso se realiza una sustitución no lineal donde cada byte es reemplazado con otro de acuerdo a una tabla de búsqueda.
ShiftRows — en este paso se realiza una transposición donde cada fila del «state» es rotada de manera cíclica un número determinado de veces.
MixColumns — operación de mezclado que opera en las columnas del «state», combinando los cuatro bytes en cada columna usando una transformación lineal.
AddRoundKey — cada byte del «state» es combinado con la clave «round»; cada clave «round» se deriva de la clave de cifrado usando una iteración de la clave.
Etapa final:
SubBytes
ShiftRows
AddRoundKey
Etapa SubBytes- Substitución de bits[editar]
En la etapa SubBytes, cada byte en la matriz es actualizado usando la caja-S de Rijndael de 8 bits. Esta operación provee la no linealidad en el cifrado. La caja-S utilizada proviene de la función inversa alrededor del GF(28), conocido por tener grandes propiedades de no linealidad. Para evitar ataques basados en simples propiedades algebraicas, la caja-S se construye por la combinación de la función inversa con una transformación afín inversible. La caja-S también se elige para evitar puntos estables (y es por lo tanto un derangement), y también cualesquiera puntos estables opuestos.
La caja-S es descrita en mayor profundidad en el artículo caja-S de Rijndael.
Etapa ShiftRows-Desplazar filas[editar]
El paso ShiftRows opera en las filas del state; rota de manera cíclica los bytes en cada fila por un determinado offset. En AES, la primera fila queda en la misma posición. Cada byte de la segunda fila es rotado una posición a la izquierda. De manera similar, la tercera y cuarta filas son rotadas por los offsets de dos y tres respectivamente. De esta manera, cada columna del state resultante del paso ShiftRows está compuesta por bytes de cada columna del state inicial. (variantes de Rijndael con mayor tamaño de bloque tienen offsets distintos).
Etapa MixColumns- Mezclar columnas[editar]
En el paso MixColumns, los cuatro bytes de cada columna del state se combinan usando una transformación lineal inversible. La función MixColumns toma cuatro bytes como entrada y devuelve cuatro bytes, donde cada byte de entrada influye todas las salidas de cuatro bytes. Junto con ShiftRows, MixColumns implica difusión en el cifrado. Cada columna se trata como un polinomio GF(28) y luego se multiplica el módulo  con un polinomio fijo . El paso MixColumns puede verse como una multiplicación matricial en el campo finito de Rijndael.
Etapa AddRoundKey- Cálculo de las subclaves[editar]
En el paso AddRoundKey, la subclave se combina con el state. En cada ronda se obtiene una subclave de la clave principal, usando la iteración de la clave; cada subclave es del mismo tamaño que el state. La subclave se agrega combinando cada byte del state con el correspondiente byte de la subclave usando XOR.
Optimización del cifrado[editar]
En sistemas de 32 bits o de mayor tamaño de palabra, es posible acelerar la ejecución de este algoritmo mediante la conversión de las transformaciones SubBytes, ShiftRows y MixColumn en tablas. Se tienen cuatro tablas de 256 entradas de 32 bits que utilizan un total de 4 kilobytes (4096 bytes) de memoria, un Kb cada tabla. De esta manera, una ronda del algoritmo consiste en 16 búsquedas en una tabla seguida de 16 operaciones XOR de 32 bits en el paso AddRoundKey. Si el tamaño de 4 kilobytes de la tabla es demasiado grande para una plataforma determinada, la operación de búsqueda en la tabla se puede realizar mediante una sola tabla de 256 entradas de 32 bits mediante el uso de rotaciones circulares.

mas o menos para que veas el nivel de estos cifradores...
http://es.wikipedia.org/wiki/Advanced_Encryption_Standard

Aqui una explicacion en ingles con un cifrador implantado en js con un output detallado...

http://people.eku.edu/styere/Encrypt/JS-AES.html
nada más te deja escoger 5 claves diferentes por
CitarI have decided to not allow the key to changed to reduce the chance of this page being used to solve homework problems
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

OmarHack

Esa información es una pura mina de oro. Intentaré hacer una animalada de capas a cada cual más segura, empiezo la 4.
Un saludo y muchas gracias!
I like to test things.

engel lex

recomendacion... divide en bloques, cifra, mezcla, comprime, cifra...

fijate que el AES es "simple" pero lo suficientemtente bien pensado para que sea dificil de superar
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.