Hola  ;)

Hoy traigo algo bastante especial, estos días he estado programando un cifrador.
Dato: Un cifrado no puede descifrase sabiendo los datos del cifrado de lo contrario es una codificación me explico:

El binario una de las codificaciones más famosas del mundo sabiendo el metodo de codificación podríamos descifrarlo. Pero con AES por ejemplo uno de los cifrados más conocidos aunque conozcamos el metodo de cifrado no podríamos descifralo por esa forma. Sabiendo esto continuemos.

He creado un cifrado, en python3 [Enlace externo eliminado para invitados] que tiene una clave y (o al menos se intento)
no se podría descifrar sin romper la clave. Quería proponer intentar descifrar un mensaje para ver si es seguro. De esta forma la comunidad gana porque se puede jugar con el que a mi parecer es interesante y yo gano por los bugs. Win & Win.

Captura del proyecto:
[Enlace externo eliminado para invitados]


(ADVERTENCIA: Solo soporta letras minusculas y números.)
Texto cifrado: 309224446557488409754066854545005782200040975244112

Si lo conseguís ponedlo abajo en los comentarios.  :P

Saludos  :)
Esta versión tiene un pequeño bug. [Enlace externo eliminado para invitados] esa ya debería funcionar sin problemas


Saludos.
Miguel Alonso: escribió: Esta versión tiene un pequeño bug. [Enlace externo eliminado para invitados] esa ya debería funcionar sin problemas


Saludos.
[Enlace externo eliminado para invitados] otro bug mas 
Imagen
 este debería funcionar sin problemas 
Hola,

Buen reto, logre descifrar el algoritmo usando fuerza bruta, al momento de escribir esto esta corriendo el hash que compartes.
Permiteme platicar un poco de lo que note con este algoritmo, inicialmente note que usaste únicamente numero primos todos en el rango de los 5 dígitos lo cual hace la mayoría de métodos actuales de hashing por lo que trate de abordar el problema estocasticamente note que no había ninguna consecuencia y hasta cierto punto la conversión de carácter a numero primo era aleatorio, el caracter c era menor que el d pero no así el caracter h. Mi segundo intento fue una aproximación probabilística pero de nuevo la aleatoriodad no ayuda mucho así que decidí generar un script puramente de fuerza bruta, al hacer pruebas con un texto y contraseña conocido me di cuenta de que este algoritmo es muy sensible a la fuerza bruta y esto es debido a la manera en la que codificas la contraseña, osea sumas el numero primo y eso hace que nuestros axiomas matemáticos la conmutabilidad nos ayude, el orden de los sumandos no altera la suma, en otras palabras no importa si la contraseña es la original sino que contenga los caracteres originales

Te pongo un ejemplo
Texto original: hola
Contraseña: hola
Hash: 2165725338312356184104850
Resultado del script

Hash: 2165725338312356184104850
Texto descifrado: hola
Contraseña: ahlo

Comparto el código del script, no es lo mas elegante ni lo mas optimo pero a esta edad con que funcione me basta

Mostrar/Ocultar



El resultado es el siguiente
------------------------------------------------------------------------------
text decrypted:  underc0de
------ stats ------
attemps:  73406621
state:  [0, 1, 5, 6, 21, 26]
password:  1267lq
elapsed time:  498.1932461261749
------------------------------------------------------------------------------


Saludos. 
Imagen
Dovahkiin, naal ok zin los vahriin,
Wah dein vokul mahfaeraak ahst vaal!
Dovahkiin: escribió: Hola,

Buen reto, logre descifrar el algoritmo usando fuerza bruta, al momento de escribir esto esta corriendo el hash que compartes.
Permiteme platicar un poco de lo que note con este algoritmo, inicialmente note que usaste únicamente numero primos todos en el rango de los 5 dígitos lo cual hace la mayoría de métodos actuales de hashing por lo que trate de abordar el problema estocasticamente note que no había ninguna consecuencia y hasta cierto punto la conversión de carácter a numero primo era aleatorio, el caracter c era menor que el d pero no así el caracter h. Mi segundo intento fue una aproximación probabilística pero de nuevo la aleatoriodad no ayuda mucho así que decidí generar un script puramente de fuerza bruta, al hacer pruebas con un texto y contraseña conocido me di cuenta de que este algoritmo es muy sensible a la fuerza bruta y esto es debido a la manera en la que codificas la contraseña, osea sumas el numero primo y eso hace que nuestros axiomas matemáticos la conmutabilidad nos ayude, el orden de los sumandos no altera la suma, en otras palabras no importa si la contraseña es la original sino que contenga los caracteres originales

Te pongo un ejemplo
Texto original: hola
Contraseña: hola
Hash: 2165725338312356184104850
Resultado del script

Hash: 2165725338312356184104850
Texto descifrado: hola
Contraseña: ahlo

Comparto el código del script, no es lo mas elegante ni lo mas optimo pero a esta edad con que funcione me basta

Mostrar/Ocultar



El resultado es el siguiente
------------------------------------------------------------------------------
text decrypted:  underc0de
------ stats ------
attemps:  73406621
state:  [0, 1, 5, 6, 21, 26]
password:  1267lq
elapsed time:  498.1932461261749
------------------------------------------------------------------------------


Saludos. 
Imagen
(El proyecto esta haciéndose por dan884075 y por mi actualmente.)

Hola después de unos días mejorando el cifrado aquí traigo una nueva versión.  :)

MEJORAS:
(Ya no tiene múltiples claves)

Estube hablando con dan884075, su algoritmo de fuerza bruta con esta versión tardaría 24 años en probar todas las combinaciones sabiendo que tenemos 37 caracteres y una password de 8 caracteres 37 elevado a 8 nos salen unas 3512479453921 de probabilidades dijo que python3 es MUY lento que pasándolo a c podría acelerarlo unas 1500 veces  :'( pero aproximadamente son 8 días. Eso esta por ver. La verdad estoy muy contento con el resultado espero que lo disfruten tanto como yo  ;)

Próximas mejoras:

-Crear una librería de python con este cifrado.

-Poder cifrar archivos.(Esto se podría hacer con un par de lineas de código actualmente el problema es que ocuparía mucho más espacio voy a ver la forma de optimizar.)

-Meter todos lo bites así con una clave de 8 caracteres sería 255 elevado a 8: 17878103347812890625 con 10 caracteres de password superariamos en probabilidades a la mismísima maquina enigma tenía 159 trillones de probabilidades esta con 10 caracteres de clave tendría un cuatrillón ciento sesenta y dos mil quinientos veintitrés trillones seiscientos setenta mil ciento noventa y un billones quinientos treinta y tres mil doscientos doce millones ochocientos noventa mil seiscientos veinticinco probabilidades. :o

Saludos.

Nueva versión [Enlace externo eliminado para invitados]
Hola,

Podrías volver a revisar el código me sigue siendo posible descifrar el código con varias claves, hice la prueba con la siguiente información
Texto a cifrar: texto encriptado
Contraseña: prueba
22547730524228948139766652479143367849847909473752122277393854947267117157720176151622
[Enlace externo eliminado para invitados]


Al descifrar uso los siguientes datos:
Texto cifrado: 22547730524228948139766652479143367849847909473752122277393854947267117157720176151622
Contraseña: prueba
texto encriptado
[Enlace externo eliminado para invitados]


Genere un nuevo script que con ayuda de multiprocessing asigna y distribuye una porción de la fuerza bruta a cada procesador lógico de la computadora

Mostrar/Ocultar


Dando esto como resultado
hash: 22547730524228948139766652479143367849847909473752122277393854947267117157720176151622
------------------------------------------------------------------------------
text decrypted:  texto encriptado
------ stats ------
cores used: 16
attemps:  63950187
password:  f1459d
elapsed time:  46.89895153045654
------------------------------------------------------------------------------
[Enlace externo eliminado para invitados]


Tratare de pasar el script a C/C++ para validar el porcentaje de mejora

Saludos. 
Imagen
Dovahkiin, naal ok zin los vahriin,
Wah dein vokul mahfaeraak ahst vaal!
se entienden ustedes 2 nada mas
  saludos
..... muy complicado para un mortal amateur
paresco malo ,pero soy bueno
Hola,

Comparto la traducción a C del script de fuerza bruta, debido a las dimensiones de los números manejados se requiere la librería GMP.

Mostrar/Ocultar

Este es el resultado
hash: 22547730524228948139766652479143367849847909473752122277393854947267117157720176151622
attemps: 1000000        pass len: 4
attemps: 10000000      pass len: 5
--------------------
text: texto encriptado
--------------------
attemps: 77106721
time: 4.80 s
pass: 1459df
La versión multithreaded me esta generando muchas inconsistencias que espero resolver, pero si se obtiene una mejora en los tiempos

Saludos.
Dovahkiin, naal ok zin los vahriin,
Wah dein vokul mahfaeraak ahst vaal!
Dovahkiin:: escribió: Hola,

Podrías volver a revisar el código me sigue siendo posible descifrar el código con varias claves, hice la prueba con la siguiente información
Texto a cifrar: texto encriptado
Contraseña: prueba
22547730524228948139766652479143367849847909473752122277393854947267117157720176151622
[Enlace externo eliminado para invitados]


Al descifrar uso los siguientes datos:
Texto cifrado: 22547730524228948139766652479143367849847909473752122277393854947267117157720176151622
Contraseña: prueba
texto encriptado
[Enlace externo eliminado para invitados]


Genere un nuevo script que con ayuda de multiprocessing asigna y distribuye una porción de la fuerza bruta a cada procesador lógico de la computadora

Mostrar/Ocultar


Dando esto como resultado
hash: 22547730524228948139766652479143367849847909473752122277393854947267117157720176151622
------------------------------------------------------------------------------
text decrypted:  texto encriptado
------ stats ------
cores used: 16
attemps:  63950187
password:  f1459d
elapsed time:  46.89895153045654
------------------------------------------------------------------------------
[Enlace externo eliminado para invitados]


Tratare de pasar el script a C/C++ para validar el porcentaje de mejora

Saludos. 
Imagen
Vale he de tener un severo problema mental, programe la actualización pero subi un link antiguo 
Imagen


[Enlace externo eliminado para invitados] a ver como te arreglas con este 
Imagen


4557910554984394109075272132259958713597178155196463814883222479264704983307047713758281492801198362243997259965652473801944581884724254720206397703783922140672617597891770127
Miguel Alonso:::: escribió:
Dovahkiin:::::: escribió: Hola,

Podrías volver a revisar el código me sigue siendo posible descifrar el código con varias claves, hice la prueba con la siguiente información
Texto a cifrar: texto encriptado
Contraseña: prueba
22547730524228948139766652479143367849847909473752122277393854947267117157720176151622
[Enlace externo eliminado para invitados]


Al descifrar uso los siguientes datos:
Texto cifrado: 22547730524228948139766652479143367849847909473752122277393854947267117157720176151622
Contraseña: prueba
texto encriptado
[Enlace externo eliminado para invitados]


Genere un nuevo script que con ayuda de multiprocessing asigna y distribuye una porción de la fuerza bruta a cada procesador lógico de la computadora

Mostrar/Ocultar


Dando esto como resultado
hash: 22547730524228948139766652479143367849847909473752122277393854947267117157720176151622
------------------------------------------------------------------------------
text decrypted:  texto encriptado
------ stats ------
cores used: 16
attemps:  63950187
password:  f1459d
elapsed time:  46.89895153045654
------------------------------------------------------------------------------
[Enlace externo eliminado para invitados]


Tratare de pasar el script a C/C++ para validar el porcentaje de mejora

Saludos. 
Imagen
Vale he de tener un severo problema mental, programe la actualización pero subi un link antiguo 
Imagen


[Enlace externo eliminado para invitados] a ver como te arreglas con este 
Imagen


4557910554984394109075272132259958713597178155196463814883222479264704983307047713758281492801198362243997259965652473801944581884724254720206397703783922140672617597891770127
Si todo sale segun lo previsto con tus 16 hilos tardarías al rededor de 2 días con una pass de 8 probando todas las combinaciones como mínimo
Pues al parecer el cifrado llego al punto de cualquier otro algoritmo de encriptación, se puede descifrar pero el tiempo y coste computacional invertido es demasiado.
No deje mi maquina los dos días que comentas, a las 8 horas detuve el brute-forcing y diseñe otro algoritmo. Este algoritmo se basa en factorizar el hash hasta obtener un número primo, este proceso es el más demandante, con estos factores se realiza una permutación hasta obtener un texto descifrable ya sea el texto o la contraseña, obtuve una mejora del 50% en velocidad pero de nuevo no deje mi computadora más de 8 horas.
No puedo compartir el proyecto ya que lo dividí en varios módulos pero probablemente lo suba a un repositorio.

TL;DR es descifrable pero el tiempo invertido es excesivo.

Saludos 
Imagen
Dovahkiin, naal ok zin los vahriin,
Wah dein vokul mahfaeraak ahst vaal!
Responder

Volver a “Troyanos y Herramientas”