Cifrado usando XOR. C++ y Linux

Hoy aplicaremos un tipo de cifrado basado en un operador lógico XOR. Programaremos en C++ y compilaremos desde el terminal.
El operador XOR opera a nivel de bit
A ^ A = 1
A ^ B = 0
(A ^ B) ^ B = B

Como ejemplo aplicaremos a la palabra nuke el operador XOR (la contraseña de cifrado que usaremos bull)

XOR
Cifrado XOR

En este tipo de cifrado, si se vuelve a cifrar una segunda vez con la misma clave obtengo el mensaje original. Usado de forma aislada como único método de cifrado es muy débil, pero esta incluido en algoritmos más complejos como puede ser AES.

Programa de cifrado usando XOR

  • Crearemos un archivo llamado XOR.cpp
  • El programa nos debe pedir la frase de cifrado y la clave.
  • Debe aplicar el operador XOR bit a bit.
  • Nos mostrará por pantalla como se va aplicando el operador letra a letra y la frase final cifrada.

Puedes copiarlo y pegarlo con cualquier editor de texto para hacer modificaciones y pruebas

#include <iostream>
#include <string>
using namespace std;int main(){// Variables
int a,b,c;
int i,j;
string frase;
string clave;string res;//Entrada de Datos
cout << “Este programa encripta una frase usando el operador XOR”;
cout << “n”;
cout << “Introduce la frase para encriptarn”;
getline(cin,frase);
cout << “clave:”;
cin >> clave;
res = frase;//Se aplica el operador XOR
for(i = 0; i < frase.length() ; i++){
a = int (frase[i]);
j = i % clave.length();
b = int (clave[j]);
c = a ^ b;
res[i] = char( c );

//Resultados en pantalla
cout << frase[i]<<” XOR ” ;
cout << clave[j];
cout << ” = ” << res[i] ; cout << “n”; }
cout << “La frase encriptada es:n”;
cout << res;
cout << “n”;
return 0;
}

Compilando y Ejecutando.

Compilamos desde el terminal usando; g++ -o XOR XOR.cpp
Y ejeculamos ./XOR
En el ejemplo usaremos como frase para cifrar: nukebull y clave: +-*
Y lo volveremos a aplicar una segunda vez al resultado con la misma clave para probar que obtenemos la frase original.

[nukebull XOR]$ g++ -o XOR XOR.cpp
[nukebull XOR]$ ./XOR
Este programa encripta una frase usando el operador XOR
Introduce una frase para encriptar
nukebull
clave:+-*
n XOR + = E
u XOR - = X
k XOR * = A
e XOR + = N
b XOR - = O
u XOR * = _
l XOR + = G
l XOR - = A
La frase encriptada es:
EXANO_GA

[nukebull XOR]$ ./XOR
Este programa encripta una frase usando el operador XOR
Introduce una frase para encriptar
EXANO_GA
clave:+-*
E XOR + = n
X XOR - = u
A XOR * = k
N XOR + = e
O XOR - = b
_ XOR * = u
G XOR + = l
A XOR - = l
La frase encriptada es:
nukebull

Cualquier consulta estaré encantado de responderos.

Tor Browser para Linux

Tor Browser es a día de hoy uno de los navegadores que mejor guarda nuestro anonimato, se basa en la Red Tor, haciendo que lo que enviamos viaje de forma cifrada de ordenador(nodo) en ordenador(nodo) de forma aleatoria. Nada es perfecto ni infalible pero es lo mejor que tenemos a día de hoy. Si un organismo (Gobierno X) controla un gran número de nodos, al final analizando una gran cantidad de paquetes de datos, localizarán la ubicación del origen. Cuanto menos lo uses desde la misma ubicación más anónimo seras.

Si os parece interesante podéis profundizar accediendo a la página del Proyecto Tor www.torproject.org

Descargar, verificar la integridad del archivo e instalarlo en Linux.

En el siguiente vídeo os explico los pasos que debéis realizar, para la verificación debéis tener instalado GnuPG

 

En la siguiente imagen muestro lo que se obtiene al intentar geolocalizar mi ip. (Se ha borrado parte de la ip mostrada para mantener el anonimato del nodo, la mía real  empieza por 88)

Tor Browser
Ip de Origen 88,….. Ip detectada 185,…..

Cifrado simétrico con GnuPG (Linux)

Esta entrada es para la consola de Linux  Empezaremos viendo que es GnuPG y como se utiliza gpg para cifrar de forma simétrica. Crearemos scripts a modo de ejemplo

GnuPG

GNU Privacy Guard (GnuPG o GPG) es una herramienta de cifrado y firmas digitales desarrollado por Werner Koch, que viene a ser un reemplazo del PGP (Pretty Good Privacy) pero con la principal diferencia que es software libre licenciado bajo la GPL. GPG utiliza el estándar del IETF denominado OpenPGP. (Wiki)

Es un software utilizado para encriptación asimétrica , muy útil para enviar correo cifrado, y para firmar documentos. Desde la consola lo utilizaremos mediante el comando gpg. Presente en casi todas las distribuciones de Linux. Aconsejo usar el repositorio de tu distro si aún no lo tienes.

Cuando trabajamos con encriptación simétrica, una clave muy débil invalida la fortaleza de cualquier algoritmo. Aconsejo mirar anterior entrada Encriptacion Simetrica

Para entornos gráfico recomiendo Kleopatra, buena donde las haya esta aplicación.

¿Que algoritmos puedo usar?

Para ver con que algoritmos contamos en nuestro PC escribamos en la consola:

gpg –version


gpg (GnuPG) 2.2.10
libgcrypt 1.8.3
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html&gt;
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/nukebull/.gnupg
Algoritmos disponibles:
Clave pública: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cifrado: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, 
CAMELLIA128, CAMELLIA192, CAMELLIA256
Resumen: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compresión: Sin comprimir, ZIP, ZLIB, BZIP2


Después de Cifrado, muestra todos los algoritmos que pode,os utilizar. IDEA,3DES,…,CAMELIA256

Como encriptar de forma simetrica usando gpg

Cifraremos el archivo ArchivoDeEntrada usando el algoritmo twofish y obtendremos el archivo cifrado ArchivoDeSalida

gpg -o ArchivoDeSalida -ca –cipher-algo twofish ArchivoDeEntrada

  • -o Crea el Archivo de salida
  • -c cifra de forma simétrica
  • -d descifra
  • -a Armadura ASCII (no es necesario, solo si se desea)
  • –cipher-algo elije el algoritmo de cifrado, en el ejemplo twofish (si no se pone elige AES256 por defecto, para la versión actual de gpg)

Crear varias capas usando un script de Bash

Supongamos que tenemos El archivo Datos.txt y lo tenemos que subir a Dropbox para la consulta con otras personas.

Lo cifraremos para que no sea de dominio publico. Y también usaremos vtres capas, con distintos algoritmos, por si un de ellos fuese roto en el futuro, no tener los datos expuestos.

Primer script, se encarga de encriptar(en mi caso lo he llamado cripto, y le doy permisos con chmod +x cripto)

En mi caso para ejecutarlo ./cripto

 


#!/bin/bash

#Vicente Parra
#www.nukebull.com
# Encriptador por capas camellia256 + twofish + AES256 + ARMOR ASCII

# Encriptac. gpg simetrica

gpg -o Datos.cam -c –cipher-algo camellia256 Datos.txt
echo “camellia256”

gpg -o Datos.two -c –cipher-algo twofish Datos.cam
echo “camellia256 + twofish”

# borra los fichero intermedio  si se desea omitir comentar la siguiente linea
rm Datos.cam

gpg -o DatosDropBox -ca –cipher-algo aes256 Datos.two
echo “camellia256 + twofish +AES256+ARMOR ASCII”

# borra los fichero intermedio , si se desea omitir comentar la siguiente linea
rm Datos.two


 

Segundo script, se encarga de desencriptar(en mi caso lo he llamado decripto, y le doy permisos con chmod +x decripto)

Para ejecutarlo ./decripto

 


#!/bin/bash

#Vicente Parra
#www.nukebull.com
# DesEncriptador por capas camellia256 + twofish + AES256 + ARMOR ASCII

# Encriptac. gpg simetrica (desencriptar)

gpg -o Datos.uno -d DatosDropBox
echo “AES256”

gpg -o Datos.dos -d Datos.uno
echo “twofish+ AES256”

# borra los fichero intermedio one si se desea omitir comentar la siguiente linea
rm Datos.uno

gpg -o DatosCliente.txt -d Datos.dos
echo “camellia256 + twofish +AES256+ARMOR ASCII”

# borra los fichero intermedio two, si se desea omitir comentar la siguiente linea
rm Datos.dos


La contraseña dentro del script

En el siguiente ejemplo la password no nos la pide, va dentro del script para veáis como se utiliza, es necesario poner –batch para que funcione en mi versión de gpg

 


#!/bin/bash

#Vicente Parra
#www.nukebull.com
# Encriptador por capas camellia256 + twofish + AES256 + ARMOR ASCII

#Variables-Password
p1=”218e13a205e802f2c”
p2=”9945e6fae4bacbbb0″
p3=”265e779f40fcbfbcd”

# Encriptac. gpg simetrica

gpg –batch -o Datos.cam -c –cipher-algo camellia256 –passphrase $p1 Datos.txt
echo “camellia256”

gpg –batch -o Datos.two -c –cipher-algo twofish –passphrase $p2 Datos.cam
echo “camellia256 + twofish”

# borra los fichero intermedio one si se desea omitir comentar la siguiente linea
rm Datos.cam

gpg –batch -o DatosDropBox -ca –cipher-algo aes256 –passphrase $p3 Datos.two
echo “camellia256 + twofish +AES256+ARMOR ASCII”

# borra los fichero intermedio two, si se desea omitir comentar la siguiente linea
rm Datos.two


Bibliografía para ampliar.

Enlace muy interesante que amplia conocimientos >> Enlace

Página del proyecto https://gnupg.org/

Doña wiki >>  Enlace Wiki

Jugar en Linux CSGO

Steam permite jugar cada día a más juegos en Linux mediante visualización. No todos están soportados y al no funcionar de forma nativa te hace perder rendimiento. El rendimiento final va depender sobre todo del hardware de tu pc.

En lo sucesivo probaré varios juego, que iré mostrando en sucesivas entradas, para que veáis su funcionamiento.

Mi equipo es:

  • AMD Athlon(tm) X4 860K (2 nucleos – 4 hilos)
  • MSI AMD Radeon R9 280 3Gb
  • Ram 8Gb DDR3
  • Resolución de pantalla 1080p
  • Sistema operativo Antergos (basado en Arch Linux)
  • Los juegos corren mediante Steam (Runtime), versión virtualizada de Steam.

El primero que mostraré es un clásico de Valve, quizá uno de los más odiados y amados.

CSGO. (Jugado sin capturar pantalla 60 fps 1080p)

Para cualquier consulta, dejadme un comentario.

Backup con Bash y AES Crypt (Terminal Linux)

Haremos un backup, mediante un script con bash, con el terminal de Linux. Usaremos el editor gedit, los comandos tar (compresor empaquetador ), aescrypt (Encriptar), rm (borrar archivos).

Para  estos script debemos tener instalado aescrypt, usar el terminal, un editor tipo vim, gedit, … y ganas de teclear.

 

Instalar AES Crypt

En muchas distribuciones lo encontraras en su repositorio. Si no estuviera sigue los siguientes pasos:

Descarga desde la pagina del proyecto https://www.aescrypt.com/download/, elegir entre 32-64 bits y descomprimir el fichero desde la carpeta donde lo has descargado.

gzip -d AESCrypt-GUI-3.11-Linux-x86_64-Install.gz

darle premiso de Ejecución

chmod +x AESCrypt-GUI-3.11-Linux-x86_64-Install

Ejecuta el instalador.

./AESCrypt-GUI-3.11-Linux-x86_64-Install

 

¿Como creo un script de bash ejecutable?

Crearemos un documento de texto, en la primera linea debemos escribir

#!/bin/bash

luego escribir el codigo y darle permisos de ejecucion

chmod +x TuScriptBash

¿Que queremos hacer en este script?

  • Tenemos una carpeta con archivos y carpetas que queremos guardar en un archivo comprimido
  • También encriptaremos mediante al algoritmo AES256 dicho archivo comprimido.
  • Haremos dos script uno empaquetará y encriptará y el otro desencriptará y desempaquetará.
  • La password la pide el terminal mediante el uso de read -s.

Script para Encriptar (nombre del programa AESENCRYT)

#!/bin/bash
#Vicente Parra
#www.nukebull.com
# AES Crypt + Tar

#Variables Password entarada read -s oculta

echo “Introduce contraseña”
read -s Password

# tar + gzip no incluyo el ejecutable (-c crea archivo , z comprime gzip, -v vervose , -f  le da al archivo la terminación tar)
tar -czvf backup.tar.gz –exclude=”AESENCRYPT” *

# Encriptac. AES Crypt (-e encrypt , -p password)
aescrypt -e -p $Password backup.tar.gz

# borra los fichero intermedio tar.gz si se desea omitir comentar la siguiente linea
rm backup.tar.gz

echo Script Terminado

 

Antes de ejecutar acordarse de darle permisos.

chmod +x AESCRYPT

Para ejecutar  desde la carpeta que que nos interese hacer el backup.

./AESCRYPT

 

Script para Desencriptar ( nombre del programa AESDECRYP)

#!/bin/bash
#Vicente Parra
#www.nukebull.com
# desencriptador AES Crypt Tar

#Variables Password entarada read -s oculta
echo “Introduce contraseña”
read -s Password

# Desencriptar. AESCRYPT (-d decrypt, -p Password)
aescrypt -d -p $Password backup.tar.gz.aes

# borra los fichero intermedio tar.gz.aes si se desea desactivar comentar la siguiente linea
rm backup.tar.gz.aes

# tar + gzip  (-x desenpaqueta )
tar -xzvf backup.tar.gz

# borra los fichero intermedio tar.gz si se desea desactivar comentar la siguiente linea
rm backup.tar.gz

# borra los fichero AESDECRYPT si se desea activar descomentar la siguiente linea
# rm AESDECRYPT

 

Antes de ejecutar acordarse de darle permisos.

chmod +x AESDECRYPT

Para ejecutar

./AESDECRYPT

Podemos añadir más instrucciones, como copiar o mover a una carpeta especifica con cp o mv,, usar gpg (GnuPG) para encriptar de forma asimétrica en vez de aescript. Y otras muchas caracteristicas.

Si deseáis cualquier explicación de cualquier comando o de parte del script. Mandarme un comentario, Gracias

 

 

¿Saben tu contraseña?

Que pensarías si todo el mundo supiese tu contraseña, parece que esto es imposible, pero existen archivos con las contraseñas mas comunes y puede que la tuya esta ahí.
Si tu contraseña esta en la lista en segundos o menos, podrán tener acceso a datos que tu no querrías.

¿Es muy débil tu contraseña?

Os voy a mostrar un típico archivo de este tipo, en este caso el archivo es de libre distribución y se usa para cuando te registras en alguna página, comprobar que tu clave es segura. Existe mas archivos como este o más extensos para realizar auditorias o para hacer otras cosas.

 

El archivo en concreto que os muestro esta alojado en GitHub.com, una de la paginas sobre desarrollo de software más grandes del mundo, con millones de usuarios.
Entra en Enlace en GitHub y elige cualquiera de los archivos .txt, descargarlo y busca si tu clave  en la lista de las más usadas.

Si os es mas fácil, dejo una copia del ultimo archivo en Google Drive Dicionario en Drive

Una vez descargado, elige la opción de buscar en tu buscador, y prueba si tu contraseña esta en la lista. Si tu clave es 123456, está, es la primera de la lista.

 

Por ultimo pongo un enlace a una base de datos mayor, https://haveibeenpwned.com/Passwords, donde podremos buscar si nuestra contraseña ya ha sido captada.

Esta base es de mas extensa y contiene unas 500.000 contraseñas.

Pongo un vídeo para ayudaros

¿Que debo hacer si mi contraseña esta en la lista?

Cada día la capacidad de cómputo crece, y una contraseña que antaño era aceptable hoy en día no lo es tanto. Es conveniente una contraseña de cierta calidad.
Renuevalas por contraseñas de cierta mas fuertes y usa un gestor de contraseñas.Yo uso Keepass Software libre, es un  gestor de contraseñas que genera contraseñas seguras y ademas permite almacenarlas de forma cifrada y sencilla. Ya que es imposible no olvidar las contraseñas, si son de este tipo. Deberás crear una contraseña maestra y esta es la que dará acceso a todas las demás.

Si queréis preguntar alguna duda, os contestare encantado

 

Keepass Password Safe

Keepass password Safe, desde hace años es es mi gestor de contraseñas, es software libre, y lo podéis descargar en la pestaña de descargas.

Es un gestor de contraseñas que guarda todos los datos en un archivo cifrado mediante el algoritmo AES256, aunque existen pugins con otros algoritmos.

La ventaja de guardarlo en un solo archivo hace que podamos guardar una copia en donde queramos, Se puede usar Windows, Linux y Android.

 

Pagina del proyecto: Keepass Password Safe
Versión Android que recomiendo, ya que no se conecta a Internet: keepass2 Ofline

¿Como se usa?

El programa es sencillo, mediante una contraseña maestra, crea un archivo encriptado donde guardará el resto de claves. También permite generar contraseñas seguras mediante un generador de contraseña.Se pueden ordenar por grupos.Para Linux en el repositorio encontrareis KeepasXC, con una GUI mejorada.
En el vídeo anterior se ve una muestra de como funciona.

Portabilidad

El archivo .kdbx contiene todas las claves, este mismo archivo lo podremos abrir desde el PC o desde el Movil,. Si no queremos pasarlo con todas las contraseñs, abrimos una copia borramos lo que no queremos que llegue al móvil y guardamos con otro nombre.
Por ejemplo podemos crear archivos; movil.kdbx, bancos.kdbx, foros.Kbdx si no las queremos en uno solo.