Cifrado Katya

  • 4 Respuestas
  • 1356 Vistas

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

Desconectado ???????

  • *
  • Underc0der
  • Mensajes: 242
  • Actividad:
    0%
  • Country: 00
  • Reputación 12
    • Ver Perfil

Cifrado Katya

  • en: Julio 15, 2020, 03:11:21 am
Prefacio

Muy buenas a todos! Espero que estén muy bien.

Hoy les traigo un tipo de cifrado que he inventado, teniendo algunos procesos ya existentes como el CBC para mejorar el sistema de encriptado. No soy matemático, por lo que las fórmulas que he escrito para el mismo no son nada del otro mundo, son bastantes simples, incluso combinándolo con el cifrado afín. Así que no hay nada de magia por detrás (aunque pueden verlo así si quieren).

Así que sin más preámbulos, comencemos.


¿Que es Katya?

Katya es un algoritmo de cifrado simétrico simple desarrollado en Python.

Cómo funciona el cifrado?

Debido a que el proceso es bastante largo de explicar por acá, les invito a leer la documentación completa que les dejaré en un rato, para así no alargarme demasiado.  ;D ;D

Cómo descargar e instalar dependencias?

Para instalar las dependencias, tipeamos lo siguiente:

Código: (bash) You are not allowed to view links. Register or Login
pip install sympy
Al instalar las dependencias, como siempre, clonamos el repositorio y lógicamente, accedemos al directorio:


Código: (bash) You are not allowed to view links. Register or Login
git clone https://github.com/Kirari-Senpai/Katya-Crypt.git
cd Katya-Crypt/

Documentación completa: You are not allowed to view links. Register or Login

Cómo se usa Katya?

Acá viene lo divertido  ;D. Abrimos nuestro intérprete de Python e importamos el módulo Katya:

Código: (python) You are not allowed to view links. Register or Login
from katya import Katya

Creamos el objeto katya:

Código: (python) You are not allowed to view links. Register or Login
katya = Katya()

Establecemos el abecedario (o como quieran llamarlo :p):

Código: (python) You are not allowed to view links. Register or Login
katya.set_ABC()

Se nos creará el siguiente abecedario:



Nota: por defecto el valor del método está en 0, por lo que si desea crear un ABC personalizado, entonces deberá pasarle una lista con una longitud de 91 elementos y los mismos no deben estar repetidos.

Ahora que tenemos todo preparado, empezaremos con el proceso de cifrado.

Cifrado

Para encriptar un mensaje, usaremos el método encrypt:

Parámetros:

- Cadena a cifrar
- Contraseña (menor o igual longitud que la cadena a cifrar)
- Vector de Inicialización (por defecto se genera de manera aleatoria, pero puede hacerlo usted mismo, aunque no es recomendable).


Código: (python) You are not allowed to view links. Register or Login
msg = katya.encrypt("Hola Mundo!","katya")

Salida:



Al momento de cifrar el mensaje, se generará el IV. Para poder verlo, solo escriba:

Código: (python) You are not allowed to view links. Register or Login
katya.iv

Se verá parecido a este, en longitud me refiero:



El mismo es importante, ya que servirá para descifrar el primer bloque del mensaje. Si no sabe a que me refiero, le dejo un link para que vea de que trata, ya que como dije en el prefacio, utiliza el modo de operación CBC:

You are not allowed to view links. Register or Login


Volviendo al tema de Katya... Vieron que es bastante simple? Pero eso no es todo, más adelante les mostraré otras funciones que tiene el mismo. Ahora vamos a desencriptar.

Descifrado

Para desencriptar el mensaje, usaremos el método decrypt():

Parámetros:

- Cadena *
- Contraseña *
- Vector de Inicialización (IV) usado para cifrar el primer bloque del mensaje *
- seed (lo veremos en la siguiente sección)
- subkey1 (lo veremos en la siguiente sección)
- subkey2 (lo veremos en la siguiente sección)


Código: (python) You are not allowed to view links. Register or Login
katya.decrypt("¿bbd¡#¿bch¡e¿bfa¡)¿bcg¡c¿bbh¡Y¿bbg¡*¿bcg¡X¿beh¡U¿bcg¡i¿bbd¡`¿bbd¡%¿bcg¡G¿bfb¡B¿bcg¡O¿bbg¡´¿bbd¡.¿bcg¡X¿bfa¡4¿bcf¡S¿bbh¡O","katya",katya.iv)
Salida:




Necesito más seguridad, es posible?

Por supuesto! Hay varios métodos:

Método random_ABC() y set_seed()

Con el método random_ABC() alterarás el orden original del alfabeto, por lo que darás más dificultad al atacante para saber cuál es el orden correcto. De modo que al individuo que intenta desencriptar el mensaje, no le servirá de nada obtener la contraseña si no sabe el orden de los elementos.

La salida del mismo es la semilla, es decir, el número en el cual estará ordenado tu ABC:




Lo mismo podemos hacer con el método set_seed(). A diferencia del anterior, este es personalizado:



Ejemplo sencillo



Y en efecto, se puede apreciar que la cadena de cifrado no es la misma que mostramos en el ejemplo anterior. Ahora, a descifrar, le pasamos como argumento seed, el valor entero obtenido:



El mismo ejemplo se puede aplicar también para el método set_seed().

Advertencia: hay que considerar que si pierde el numero de orden o semilla, entonces, no podrá recuperar la información al momento de querer descifrarla.


Método subkeys()

Con este método se puede establecer las dos subclaves de las que estábamos hablando antes. Bueno, con la primer subclave estableceremos un número coprimo con 91 y con la segunda un número de desplazamiento para la cadena misma. Veamos un ejemplo sencillo:



Los parámetros del método son:

Parámetros

- subkey1
- subkey2

Si no tiene idea que número coprimo utilizar, no se preocupe, no tiene que calcular nada, puede utilizar el método show_possible_subkeys():

Código: (python) You are not allowed to view links. Register or Login
katya.show_possible_subkeys()

[1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27, 29, 30, 31, 32, 33, 34, 36, 37, 38, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 53, 54, 55, 57, 58, 59, 60, 61, 62, 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90]

Los valores de la subclave 2 debe ser de 1 a 91.

Para desencriptar, solo pasamos los argumentos de la siguiente manera:


Código: (python) You are not allowed to view links. Register or Login
katya.decrypt(msg,"katya",katya.iv,subkey1=80,subkey2=10)
Muestra



Si bien este último método no es muy seguro, se puede combinar con los métodos anteriores y así mejorar la seguridad. Eso suena bien eh? :o

Encriptar y desencriptar archivos

Advertencia: se recomienda utilizar el método reset_all() para reestablecer todos los valores (iv,subkeys,ABC) a su estado original para evitar conflictos al momento de cifrar los archivos. Esto es para que parezca que empieza de 0.

Katya nos permite cifrar archivos de una manera muy sencilla:

Código: (python) You are not allowed to view links. Register or Login
katya.file_encrypt("ruta_archivo","tu_password")
Al terminar el proceso, al archivo se le añadirá la extensión .katya y además se creará otro archivo con extensión .key donde se almacenará tu contraseña, a este último debes guardarlo en un lugar secreto.

Crearé un archivo de prueba llamado testing.txt con el contenido de "Hola Mundo!":



Y empiezo a cifrar:

Código: (python) You are not allowed to view links. Register or Login
katya.file_encrypt("testing.txt","katya")


Para descifrar:

Código: (python) You are not allowed to view links. Register or Login
katya.file_decrypt("testing.txt.katya","katya.key")
La salida final será, obviamente, el contenido descifrado, y el archivo .key, se eliminará.

Nota: para file_decrypt() se pueden utilizar los mismos parámetros que el descifrado común.


Mostrar mensajes cifrados de manera elegante

Realmente este método no es importante, es solo para mostrar en pantalla el mensaje cifrado de una forma más clara, nada del otro mundo :p El fin, se usa de la siguiente manera:


Código: (python) You are not allowed to view links. Register or Login
print(katya.elegant(msg))


En este ejemplo, cifré el siguiente mensaje:

Código: You are not allowed to view links. Register or Login
Hola Mundo! Katya es un cifrado simétrico muy simple. Saludos a todos!
Final

Bueno compañeros, espero que les haya gustado  ;D. Simplemente después de un parcial, quise relajarme un poco, y se me vino a la cabeza esto, así que decidí programarlo y plasmarlo en el foro jaja.

Falta mucho por mejorar, pero se irá viendo poco a poco, cualquier aporte al mismo, es bienvenido!

Saludos!
-Kirari
« Última modificación: Julio 15, 2020, 03:15:01 am por Kirari »

Desconectado DtxdF

  • *
  • Moderador Global
  • Mensajes: 1011
  • Actividad:
    83.33%
  • Country: 00
  • Reputación 24
  • Eres un auto y tienes dos opciones: Parar o Seguir
    • Ver Perfil
    • Mi repositorio de Github donde encontraras herramientas para tu trabajo.
    • Email

Re:Cifrado Katya

  • en: Julio 24, 2020, 04:53:50 pm
Uf compañero @You are not allowed to view links. Register or Login, te luciste. Me encantó mucho, sin duda lo voy a compartir ^-^, espero más de tus aportes.

~ DtxdF
Los seres humanos son robots, cuyo combustible es el afanado dinero.

Desconectado ???????

  • *
  • Underc0der
  • Mensajes: 242
  • Actividad:
    0%
  • Country: 00
  • Reputación 12
    • Ver Perfil

Re:Cifrado Katya

  • en: Julio 24, 2020, 05:09:51 pm
Muchaass gracias amigo @You are not allowed to view links. Register or Login  ;D, es un place mostrar estos pequeños aportes :D.

Saludos!!
-Kirari

Desconectado Gabriela

  • *
  • Co Admin
  • Mensajes: 1010
  • Actividad:
    3.33%
  • Country: 00
  • Reputación 22
  • A las personas se las conoce por sus heridas...
    • Ver Perfil
    • Hirana: red de IRC
    • Email

Re:Cifrado Katya

  • en: Julio 24, 2020, 05:48:58 pm


@You are not allowed to view links. Register or Login
Como te han comentado, estupendo trabajo compañero!!!
Habrá que probarlo.

Por demás todo el marco teórico explicativo: 10.

Gracias por compartirlo.

Saludos
Gabriela

Tú te enamoraste de mi valentía, yo me enamoré de tu oscuridad; tú aprendiste a vencer tus miedos, yo aprendí a no perderme en tu abismo.

Desconectado ???????

  • *
  • Underc0der
  • Mensajes: 242
  • Actividad:
    0%
  • Country: 00
  • Reputación 12
    • Ver Perfil

Re:Cifrado Katya

  • en: Julio 24, 2020, 05:57:32 pm
@You are not allowed to view links. Register or Login Muchas gracias compañera  ;D ;D Trataré de traer posts más seguido.  :D

Saludos!
-Kirari