Hardening AES256 – CrypText

Castellano.

Últimamente no he escrito mucho, he estado ocupado con otros proyectos, ahora llega el momento de fusionar ambos.

Estoy desarrollando una aplicación de cifrado seudo-paranoico. Se basa en el estándar AES256 al cual le añadimos dos capas para evitar algunos ataques.

El programa esta totalmente escrito en Haskell ayudándome de su entorno de desarrollo Stack y se encuentra en Alpha 0.1.3. Ya estoy implementando la ultima capa de cifrado simétrico.

Hasta la versión 1 estará solo disponible para cifrado de texto con clave de 512 bites o superior y orientado, a poder usarse en cualquier red social, servicio de mensajería o email. También cifrara mediante curvas elípticas para el envío de claves.

Los paquetes que estoy desarrollando están orientados a poderse usar también para el cifrado de archivos ya que están diseñadas para ByteString, pero esto no sera hasta la versión 2.

En versiones posteriores también se podría implementar un servicio de mensajería basado en el anonimato, una vez que añada conexión a base de datos. Quizá en la version 3

La aplicación se llama CrypText y se encuentra alojada en mi repositorio GitLab. Y se distribuye bajo licencia BSD 3-clause traducido al castellano Licencia Publica de Libre Uso.

Aquellos que queráis colaborar, probarla o trastear estáis invitados.

English.

Lately I have not written much, I’ve been busy with other projects, now it’s time to merge both.
I am developing a pseudo-paranoid encryption application. It is based on the AES256 standard to which we add two layers to avoid some attacks.


The program is completely written in Haskell, helping me with its Stack development environment and it is in Alpha 0.1.3. I am already implementing the last layer of symmetric encryption.


Until version 1 will only be available for text encryption with a 512-bit key or higher and oriented, to be used in any social network, messaging service or email. It will also encrypt using elliptical curves for sending keys.


The packages that I am developing are oriented to be able to be used also for the encryption of files since they are designed for ByteString, but this will not be until the version 2.


In later versions you could also implement a messaging service based on anonymity, once you add a database connection. Maybe in version 3.


The application is called CrypText and is hosted in my repository GitLab. It is distributed under a BSD 3-clause license.


Those who want to collaborate, test or …. are invited.

Haskell. Veni Vidi Vici

Esta segunda entrada de programación en Haskell veremos un ejemplo de cifrado Cesar que nos permitirá practicar con la definición de funciones.

Para ponernos en situación veremos que es el cifrado Cesar, y en nuestro caso, con el fin de practicar con la definición de funciones, usaremos el alfabeto latín antiguo, el cual convivió con este cifrado en los años del Circo Romano, los acueductos…

Latín Antiguo.

El alfabeto que usaban en torno al año cero de la era cristiana, en el antiguo imperio romano era el latín antiguo y difería del alfabeto actual de 27 letras si incluimos la “ñ

  • En la Roma Antigua solo teníamos mayúsculas y las letras J,U,Ñ,W no estaban aún en el alfabeto.
  • La J fue I y la U fue V ( JESUS era IESVS ) y no llegan como tales, hasta el siglo XVIII, aunque coexistieron desde el origen ligadas a las letras I y V.
  • X e Y entraron en siglo 2 a.C. por la conquista del Imperio Griego.
  • Las minúsculas llegaron en la Edad Media.
  • La Ñ aparece como sustitución del dígrafo “NN” al final de la Edad Media en algunos alfabetos derivados del latín como el Castellano.
  • W entra en el siglo XIII por influecia de las lenguas germánicas.

Resumiendo nos queda un alfabeto de 23 letras (Sin J,U,Ñ,W) ABCDEFGHIKLMNOPQRSTVYZ

Cifrado Cesar.

El cifrado César,es una de las técnicas de cifrado más simples y más usadas. Es un tipo de cifrado por sustitución en el que una letra en el texto original es reemplazada por otra letra que se encuentra un número fijo de posiciones más adelante en el alfabeto. Por ejemplo, con un desplazamiento de 3, la A sería sustituida por la D (situada 3 lugares a la derecha de la A), la B sería reemplazada por la E, etc. Este método debe su nombre a Julio Cesar, que lo usaba para comunicarse con sus generales. Texto obtenido de la Wikipedia

Cifrado Cesar

Programa en Haskell.

Adaptaremos nuestro programa de cifrado Cesar al alfabeto latín antiguo. Nos fijaremos en la definición de la función ya que es lo más significativo del programa.

antiguas :: Int -> Char -> Char
antiguas n c
| elem c [‘A’..’I’] = alfabeto !! (mod ( (ord c) – (ord ‘A’) + n ) 23)
| elem c [‘J’] = alfabeto !! (mod ( (ord c) – (ord ‘A’) + n-1 ) 23)
| elem c [‘K’..’T’] = alfabeto !! (mod ( (ord c) – (ord ‘A’) + n-1 ) 23)
| elem c [‘U’] = alfabeto !! (mod ( (ord c) – (ord ‘A’) + n-1 ) 23)
| elem c [‘V’] = alfabeto !! (mod ( (ord c) – (ord ‘A’) + n-2 ) 23)
| elem c [‘X’..’Z’] = alfabeto !! (mod ( (ord c) – (ord ‘A’) + n-3) 23)
| elem c [‘ ‘] = ‘ ‘
|otherwise = ‘*’

— Cifrado Cesar latín antiguo versión modulo 23 con 3 desplazamientos.

— Copyright (C) 2019 Vicente Parra Hurtado – NukeBull — Licencia GPL 3


import Data.Char

— Creamos el alfabeto Latín Antiguo

alfabeto :: [Char]
alfabeto = [‘A’..’I’]++[‘K’..’T’]++[‘V’]++[‘X’..’Z’]

— Implementando C. Cesar para cada letra
antiguas :: Int -> Char -> Char
antiguas n c
| elem c [‘A’..’I’] = alfabeto !! (mod ( (ord c) – (ord ‘A’) + n ) 23)
| elem c [‘J’] = alfabeto !! (mod ( (ord c) – (ord ‘A’) + n-1 ) 23)
| elem c [‘K’..’T’] = alfabeto !! (mod ( (ord c) – (ord ‘A’) + n-1 ) 23)
| elem c [‘U’] = alfabeto !! (mod ( (ord c) – (ord ‘A’) + n-1 ) 23)
| elem c [‘V’] = alfabeto !! (mod ( (ord c) – (ord ‘A’) + n-2 ) 23)
| elem c [‘X’..’Z’] = alfabeto !! (mod ( (ord c) – (ord ‘A’) + n-3) 23)
| elem c [‘ ‘] = ‘ ‘
|otherwise = ‘*’

— Implementamos para String.

cesar :: Int -> String -> String
cesar n xs = [antiguas n x | x <- xs]

main = do

— Mostramos el Alfabeto Latin Antiguo.

putStrLn “Alfabeto latín antiguo”
putStrLn ( show ( alfabeto))

— Pedimos el texto a cifrar.

putStrLn “Introduce el texto a cifrar (Los caracteres que no existían en el latín antiguo se transformaran en *) “
line <- getLine

— Ciframos y deciframos n=3 y n=-3
— El cifrado original cesar es de 3 desplazamientos.

let texto = cesar 3 line
let textoDes = cesar (-3) texto
putStrLn (“Cifro hacía la derecha moviendo 3 posiciones”)
putStrLn ( show ( texto))
putStrLn (“Descifro hacía la izquierda moviendo 3 posiciones corrigiendo J y U “)
putStrLn ( show ( textoDes))

Ejecutamos.

runhaskell CesarAntiguo.hs
Alfabeto latín antiguo
“ABCDEFGHIKLMNOPQRSTVXYZ”
Introduce el texto a cifrar (Los caracteres que no existían en el latín antiguo se transformaran en *)
JULIO CESAR VINI VIDI VICI
Cifro hacía la derecha moviendo 3 posiciones
“MZOMR FHXDV ZMQM ZMGM ZMFM”
Descifro hacía la izquierda moviendo 3 posiciones corrigiendo J y U
“IVLIO CESAR VINI VIDI VICI”

Seguridad en WordPress (I)

Empiezo esta nueva serie de capítulos con el objetivo de mostraros como hacer vuestro WordPerfet menos vulnerable a ataques externos.

Empezaremos con algunos conceptos muy simples e iremos configurando nuestro entorno para hacerlo más seguro. El nivel de las entradas no sera complicado, con el fin de que todos podamos entenderlo fácilmente.

En esta primera entrada instalaremos un plugin o complemento gratuito que nos ayudar a hacer menos vulnerable nuestro blog, pagina web,…
En posteriores entradas varemos como configurarlo.

1. Instalación del Plugin.

Los que no queráis añadirlo os diré en cada apartado configuraciones alternativas a las del plugin.

Elegiremos en el panel de control: Plugins

1. Elige la opción de Pligins.

Elige Añadir nuevo.

2. Añadir nuevo
  • Escribe en el buscador: All in one WP.
  • Elige instalar ahora en All In One WP Security & Firewall.
  • Elegimos activar el plugin o complemento.
2.3.4. All In One WP Security & Firewall.

Nos debe quedar así.

En la entrada siguiente empezaremos a configurar el pluging explicando que es lo que hacer y porqué lo hace.

Haskell, ¿donde esta for?.

Vamos a ir desarrollando pequeños programas en Haskell, para que podáis aprender conmigo a programar en este lenguaje. Nos servirá para aprender juntos y motivarnos a seguir escribiendo código.

Hoy vamos a crear un ejemplo básico pero instructivo, crearemos un programa para generar números primos, pero para los que vengáis de otros sistemas echareis de menos algo que siempre habéis usado, el muy conocido “for”, tan usado en otros lenguajes.

¿Deberiamos tener for en haskell?

Si vienes de otros lenguajes, la primera piensas que algo pasa, que no puede ser ¿como no puede haber for aquí? La respuesta es sencilla, por que no lo necesitamos, la programación funcional nos da unas herramientas muy potentes que nos harán olvidar a nuestro querido for.

Los que tengáis una base de matemáticas importante estaréis acostumbrados a este tipo de expresiones.

mathrm{mathsf{mathrm{S={2cdot xleft|: xinmathbb{N},: xleq10right.}}}}

En haskell gracias a las listas intencionales podemos definir conjuntos de una forma similar. [x*2 | x <- [1..10]]. Este ejemplo ha sido sacado de una de las mejores guías de Haskell en castellano: http://aprendehaskell.es/

Programar sin for.

El programa de ejemplo nos permitirá calcular los números primos entre 1 y otro que nosotros definamos.

Un número es primo cuando solamente es divisible por la unidad y por el mismo. 17 seria primo. 12 no lo seria, es divisible por 1,2,3,4 y 6.

http://www.nukebull.com
— El código genera todos los números primos entre el 1 y n

— Definimos cuantos divisores tiene un número, exceptuando el numero 1 y el mismo, mediante la función mod (modulo entero)

divisores :: Int -> [Int]
divisores y = [x | x <- [2..y-1], mod y x == 0]

— Es la función nos muestra todos los números entre 1 y n que cumplen la condición de no tener divisores (excepto 1 y n).

numerosprimos :: Int -> [Int]
numerosprimos y = [x | x <- [1..y], (divisores x)== []]

— Pediremos un numero n por terminal mediante getLine

main = do
putStrLn “¿Hasta qué número desea buscar?”
n <- getLine
let num = read(n)

— Mostramos por pantalla nuestros resultados.


putStrLn “Aquí los tiene “
putStrLn (show(numerosprimos num))

Lo guardamos como NumerosPrimos.hs y ejecutamos.

runhaskell NumerosPrimos.hs
¿Hasta qué número desea buscar?
80
Aquí los tiene
[1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79]

Como podemos apreciar no hemos usado for, debemos aprender a enfrentarnos a los problemas de forma funcional.

Whonix, la puerta a la Red Tor, corriendo sobre Antergos Linux (ArchLinux)

Whonix es una distribución basada en Debian que esta diseñada para correr en maquinas virtuales. Por tanto es posible utilizarla en Windows, Mac y LInux.

La página el proyecto es: https://www.whonix.org/y desde ella os la podéis descargar.

Esta basada en la navegación a través de la Red Tor y del uso de aplicaciones para pasar inadvertidos en la red.

Para los que buscáis una distro para hacking, texting de seguridad, esta no es de ese tipo, solo se limita a pasar inadvertido en la red, que no es poco en estos días

Os dejo un vídeo para que veáis como se instala y como funciona. Cualquier duda no dudeis en dejarme el comentario y os contestare.

BlackArch Linux Penetration Testing Distribution

Os muestro un vídeo sobre BlackArch Linux, una distro basada en Arch Linux y que esta orientada al la seguridad informática.

 

 

Para los usuarios de Arch tenéis la posibilidad de añadir los repositorios de BlackArch y así acceder a todo su software incluso tenemos el repositorio del código fuente en github y podéis compilar las aplicaciones. También se puede instalar en disco o en un USBLIve

Pagina del proyecto/Distro : https://blackarch.org

Para su instalación Instalar BlackArch.

Repositorio en GitHub: GitHub de BlackArch.

BlackArch Linux  Penetration Testing Distribution
BlackArch Linux Penetration Testing Distribution

Visual Studio Code para Haskell – (Arch Linux)

Hoy muestro uno de los mejores editores para programar en haskell que he probado.

Es un viejo conocido que recientemente libero Microsorft. Visual Studio Code.

Como soy usuario de Antergos Linux,  os mostrare la instalación de este editor y de su extensión para haskell, en distribuciones basadas en Arch Linux.

Os dejo un vídeo para que os animéis a instalarlo, es muy sencillo y rápido. para los que uséis otro lenguaje de programación como Pythom el procedimiento es el mismo.

Para los que tengáis otras distros o S.O. os aconsejo utilizar Visual Studio Code para haskell.

 

Enlace de VSC.

Visual Studio Code

Enlace de Antergos Linux.

Antergos Linux