Backup automatizado para Arch Linux. ClamAv, rsync y cronie

Aprenderemos a automatizar nuestros backups en Arc Linux y derivados, usando tres aplicaciones de software libre.

  • ClamAV antivirus de libre disposición para limpiar nuestros dispositivo de huéspedes indeseables.
  • rsync potente herramienta para la transferencia y sincronización de archivos. Admite sincronización mediante ssh para transferencias a host remoto.
  • cronie (derivado de cron en ArchLinux) que permite programar o automatizar tareas.

A día de hoy, una de las mejores herramientas de seguridad, a mi entender, sigue siendo el BackUp. La copia de seguridad nos permitirá viajar atrás en el tiempo hasta ese momento en que todo era maravilloso. No hacerlo es asumir muchos e indeseables riesgos.

En mi caso y para que os sirva de ejemplo, haremos una copia de seguridad de mis carpeta Programación, donde guardo archivos que no quiero perder, en el primer vídeo también cifraremos el dispositivo usb usando la aplicación que viene por defecto en gnome; gnome-disks, ( en KDE hay una similar, pero si queréis usar la misma os pongo abajo como instalarla)

Que haremos realmente
  1. Pasaré un antivirus sobre la carpeta origen y destino.
  2. Guardare los logs del antivirus en archivos de texto.
  3. Usare solo Software libre. (cronie + antivirus ClamAV  + rsync ).
  4. En caso de  que sean datos sensibles, podríamos cifrar el dispositivo donde alojemos los backups.
  5. Usare un USB externo  en el que tendré 3 backups de la misma carpeta (diario, semanal, mensual).
  6. Realizare script de automatización que se ejecutara creando las copias de seguridad (mediante cronie).
Resumen de aplicaciones a instalar (también se puede hacer desde el gestor de paquetes):
  • Primero actualizar pacman sudo pacman -Syu
  • ClamAv, Antivirus. sudo pacman -S clamav 
  • rsync  sudo pacman -S rsync
  • cronie, gestor de tareas. sudo pacman -S cronie
  • Para cifrar almacenamiento externo externo uso el que viene en gnome instalado. sudo pacman -S gnome-disks

CIfrado (opcional)

Si deseamos cifrar seria el primer paso, el cual es dependiente del resto y opcional. (Ver video)

ANTIVIRUS (I)

Instalacion:

Instalaremos ClamAv desde terminal previa  actualización de pacman

  • sudo pacman -Syu
  • sudo pacman -S clamav 

para actualizar la base de datos del antivirus si no lo automatizamos:

sudo freshclam

Automatización del las actualizaciones del Antivirus ClamAV

Para que se  actualice ell antivirus cada vez que iniciemos el sistema. Equivale a hacer sudo freshclamen en cada inicio.

  • sudo systemctl start clamav-freshclam.service
  • sudo systemctl enable clamav-freshclam.service
Sinraxis y comandos usados.
  •  clamscan -r ORIGEN -l /DESTINOLOG
  • -r es recursivo escanea también las subcarpetas.
  • -l crea un archivo de texto con los datos del análisis.

 

Backup (II)

Instalacion.

Hemos elegido rsync por su velocidad y estabilidad, ademas de estar disponible en multitud de distribuciones y S.O.

  • sudo pacman -S rsync
Sintaxis y comandos de rsync.

La sintaxis es: rsync [opciones] origen destino

Pongo los comandos más usuales solamente, para ampliar usar rsync –help o mirara la bibliografía.

  • -a modo archivo, este modo permite copiar archivos de forma recursiva aceptando enlaces simbólicos, permisos, propiedad del usuario y grupo, así como las fechas de acceso.
  • -v muestra información en pantalla sobre las acciones que se realizan.
  • -r recursivo, realiza la copia de archivos de forma recursiva dentro de los directorios, pero no copia los permiso, los datos de las fechas de accesos o modificación de los archivos.
  • -z comprime los datos antes de enviarlos, lo que puede hacer más rápidas las transferencias entre hosts remotos, para rutas locales no proporciona ninguna ventaja usar esta opción.
  • -P Muestra el progreso de las transferencias.
  • — delete borra archivos que no estén en el origen.

 

Scripts (III).

Yo lo guarde como como BackUpDiario.sh, BackUpSemanal.sh y BackUpMensual.sh

Luego le di permisos mediante.

chmod +x BackUpDiario.sh BackUpSemanal.sh BackUpMensual.sh

El script parece más grade, porque lo he comentado todo, para que lo veáis mas claro. Estas son las instrucciones que lo componen.

  • Pasamos antivirus al Origen y guardamos el log: clamscan -r /home/nukebull/Programacion/ -l /home/nukebull/Logs/backupDiario.txt
  • Sincronizamos Archivos: rsync -a –delete /home/nukebull/Programacion/ /run/media/nukebull/401D-1A0E/BackUpDiario/
  • Pasamos antivirus al Destino y guardamos el log:clamscan -r /run/media/nukebull/401D-1A0E/BackUpDiario/ -l /home/nukebull/Logs/backupDiarioBackUp.txt
  • se añaden también dos instrucciones echo para ordenar los log del antivirus.

 

BackUpDiario.sh

#!/bin/bash

#Vicente Parra
#www.nukebull.com

# Pasamos el antivirus a la carpeta origen y guardamos los datos (log y fecha) en un archivo de texto

#escribimos en archivo log la fecha para tenerlo ordenado
echo -e “n Fecha del Backup :n” >> /home/nukebull/Logs/backupDiario.txt
echo `date` >> /home/nukebull/Logs/backupDiario.txt

# ejecutamos antivirus
clamscan -r /home/nukebull/Programacion/ -l /home/nukebull/Logs/backupDiario.txt

# Sincronizamos rsync -a –delete carpeta_origen/ carpeta_destino/ -vP ver datos des ploceso y program -delete hace pocias identicas al borrar los archivos distintos en destino
#rsync -avP –delete /home/nukebull/Programacion/ /run/media/nukebull/401D-1A0E/BackUpDiario/

rsync -a –delete /home/nukebull/Programacion/ /run/media/nukebull/401D-1A0E/BackUpDiario/

# Pasamos el antivirus a la carpeta de destino y guardamos los datos (log y fecha) en un archivo de texto

#escribimos en archivo log la fecha para tenerlo ordenado
echo -e “n Fecha del Backup : n” >> /home/nukebull/Logs/backupDiarioBackUp.txt
echo `date` >> /home/nukebull/Logs/backupDiarioBackUp.txt

# ejecutamos antivirus
clamscan -r /run/media/nukebull/401D-1A0E/BackUpDiario/ -l /home/nukebull/Logs/backupDiarioBackUp.txt

 

BackUpSemanal.sh

#!/bin/bash

#Vicente Parra
#www.nukebull.com

# Pasamos el antivirus a la carpeta origen y guardamos los datos (log y fecha) en un archivo de texto

#escribimos en archivo log la fecha para tenerlo ordenado
echo -e “n Fecha del Backup :n” >> /home/nukebull/Logs/backupSemanal.txt
echo `date` >> /home/nukebull/Logs/backupSemanal.txt

# ejecutamos antivirus
clamscan -r /home/nukebull/Programacion/ -l /home/nukebull/Logs/backupSemanal.txt

# Sincronizamos rsync -a carpeta_origen/ carpeta_destino/ // en esta omitimos –delete -v -P

rsync -a /home/nukebull/Programacion/ /run/media/nukebull/401D-1A0E/BackUpSemanal/

# Pasamos el antivirus a la carpeta de destino y guardamos los datos (log y fecha) en un archivo de texto

#escribimos en archivo log la fecha para tenerlo ordenado
echo -e “n Fecha del Backup : n” >> /home/nukebull/Logs/backupSemanalBackUp.txt
echo `date` >> /home/nukebull/Logs/backupSemanalBackUp.txt

# ejecutamos antivirus
clamscan -r /run/media/nukebull/401D-1A0E/BackUpSemanal/ -l /home/nukebull/Logs/backupSemanalBackUp.txt

 

BackUpMensual.sh

#!/bin/bash

#Vicente Parra
#www.nukebull.com

# Pasamos el antivirus a la carpeta origen y guardamos los datos (log y fecha) en un archivo de texto

#escribimos en archivo log la fecha para tenerlo ordenado
echo -e “n Fecha del Backup :n” >> /home/nukebull/Logs/backupSemanal.txt
echo `date` >> /home/nukebull/Logs/backupSemanal.txt

# ejecutamos antivirus
clamscan -r /home/nukebull/Programacion/ -l /home/nukebull/Logs/backupSemanal.txt

# Sincronizamos rsync -rvuc carpeta_origen/ carpeta_destino/ en esta omitimos –delete -v -P

rsync -a /home/nukebull/Programacion/ /run/media/nukebull/401D-1A0E/BackUpSemanal/

# Pasamos el antivirus a la carpeta de destino y guardamos los datos (log y fecha) en un archivo de texto

#escribimos en archivo log la fecha para tenerlo ordenado
echo -e “n Fecha del Backup : n” >> /home/nukebull/Logs/backupSemanalBackUp.txt
echo `date` >> /home/nukebull/Logs/backupSemanalBackUp.txt

# ejecutamos antivirus
clamscan -r /run/media/nukebull/401D-1A0E/BackUpSemanal/ -l /home/nukebull/Logs/backupSemanalBackUp.txt

Configuración de la  programación diaria, semanal y mensual (IV).

Instalamos en el sistema el daemon de cronie:

  • sudo systemctl start cronie
  • sudo systemctl enable cronie

Ejecutamos:

  • crontab -e

Sintasix: minutos(00-60), Horas(00-24),dia del mes en numero(1-31), mes en numero (1-12). Día de la semana(0-6), acción.

Y escribimos en el fichero que nos abre ( en mi caso abre nano como editor):

  • 15 20 * * * cd /home/nukebull/Programacion/Blog/ && ./BackUpDiario.sh
  • 10 20 * * 0 cd /home/nukebull/Programacion/Blog/ && ./BackUpSemanal.sh
  • 00 20 15 * * cd /home/nukebull/Programacion/Blog/ && ./BackUpMensual.sh

Para guardar en nano (Control + O), para salir (Control + X).

Bibliografía.

Sobre CalmAV.

Antivirus CamAV

Sobre rsync.

Comandos rsync

Ejemplos rsync

Configuracion cronnie – crontab.

cChuleta CronTab

 

Anuncios

Pantallas 18:9, lo que no te quieren contar.

Esta entrada esta enfocada al hardware y como nos venden pantallas mas pequeñas como si fuesen más grandes. El paso del estándar para pantallas del móvil 16:9 al 18:9 genera mas beneficios a los fabricantes que a los usuarios. La medida de las pantallas de los teléfonos móviles se define comercialmente, como medida de la diagonal en pulgadas,
Nos venden una pantalla enorme en diagonal pero no nos dicen que tienen menor superficie para la misma diagonal que el formato anterior..
Aparte de la ergonomía pocas son sus ventajas. Veremos y calcularemos (exactamente con la ayuda de un programa de calculo creado en haskell que podréis copiaros),  cuanto perdemos cuando vemos videos o fotografías. Porque todo eso no te lo cuentan.

 

En la imagen muestra como el formato alargado 18:9 no usa toda la pantalla para ver películas o youtube. En el formato 16:9 las pantallas utilizan toda la superficie optimizando así nuestro smartphone

Teléfono 18:8 de 6 Pulgadas

 

Teléfono 16:9 de 6 Pulgadas

 

En las posteriores tabla se muestra para ambos formatos:

  1. Las pulgadas de la pantalla.
  2. Cuantas pulgadas de pantalla vemos reproduciendo películas sin cortarlas.
  3. Cuantas pulgadas de pantalla vemos visualizando una fotografía a tamaño completo.
  4. El área total de la pantalla en cm².
  5. Que móvil tendríamos que comprar en el otro formato para tener la misma superficie de pantalla.
  6. En la última tabla muestra que diagonal debe tener el móvil para ver una película exactamente igual en cada formato
  7. Las podéis descargar si queréis desde mii Google Drive: Descargar Tablas.

 

Ejemplo para pantalla de 6 pulgadas

En las tablas vemos como una pantalla 18:9 de 6 pulgadas se convierte en una de 5.4 pulgadas cuando ve películas y en una de 4.8 cuando ve imágenes.

Sin embargo una pantalla 16:9 de 6 pulgadas sigue siendo de 6 pulgadas cuando ve películas y es de 5.3 viendo imágenes.

Con  un teléfono de 6 pulgadas en 16:9 vemos la película exactamente igual que con uno de 6.577 pulgadas en 18:9

Conclusiones:

  • Perderemos entre 0.5 y 0.7 pulgadas al ver un video con el formato alargado para la misma diagonal de pantalla.
  • Perderemos entre 0.4 y 0.5 pulgadas al ver un fotografía con el formato alargado para la misma diagonal de pantalla.
  • La perdida de superficie de pantalla (tamaño real) es un 6.4 % al pasar de 16:9 a 18:9.
  • Para la misma diagonal la pantalla del anterior formato 16:9 rinde mucho mejor y ademas ocupa mas superficie, es mayor.

 

Tablas:

18:9

Pulgadas Películas Fotografías Area Total cm² Equivalencia 16:9

5

4.561

4.031

64.516

4.837

5,5

5.017

4.434

78.064

5.321

6

5.473

4.837

92.903

5.805

6,5

5.929

5.240

109.032

6.289

7

6.385

5.643

126.451

6.773

16:9

Pulgadas Películas Fotografías Area Total cm² Equivalencia 18:9

5

5

4.419

68.919

5.167

5,5

5.5

4.861

83.392

5.685

6

6

5.303

99.243

6.201

6,5

6,5

5.745

116.473

6.718

7

7

6.187

135.081

7.235

Peliculas

Pelicula

16:9

18:9

5

5

5.481

5,5

5,5

6.029

6

6

6.577

6,5

6,5

7.125

7

7

7.673

Apendices.

Matemática para los cálculos del programa.

a² + b² = h² Teorema de Pitágoras

16/9 = a/b => a = 16/9 b Proporción para pantallas 16:9

18/9 = a/b => a =18/9 b Proporción para pantallas 18:9

A = a * b Área del rectángulo en ambos casos.

  • A = 16/9 b² = 1.7777778 b²
  • A = 18/9 b² = 2 b²

(16/9)²b² + b² = h² => (256+81)/81 b² = h² => 4,1605 * b² = h² => b² = h² / 4.1605

(18/9)²b² + b² = h² => (4+1) * b² = h² => 5 * b² = h² => b² = h² / 5

Área en función de la diagonal

  • A = 16/9 * ( h² / 4.1605) = 0,427299703 h²
  • A = 18/9 * ( h² / 5 ) = 0.4 h²

En los cálculos de equivalencia se toma el lado menor de cada formato y se calcula la equivalencia usando la proporción 16:9 para películas y l proporción 3:2 para fotos

 

Programa para el calculo introduciendo la diagonal de tu teléfono.

El programa esta escrito en haskell, para ejecutarlo debes copiarlo en un archivo con extensión .hs y escribir en la terminal.

runhaskell NombrePrograma.hs

Para instalar haskell visita www.haskell.org o mira mi anterior entrada Haskell, instalación en Arch Linux

— Progrmama que compara las pantallas de movil de 16:9 y 18:9
— Calcula todos los datos a partir de la diagonal de la pantalla en pulgadas
— La entrada de este dato sera desde la terminal (numpulgadas)
main :: IO ()
— Funciones para el calculo de la longitud de los lados 16:9
— Lado mayor
dieciseisP :: Float -> Float
dieciseisP x = sqrt ((x ^ 2)/ 4.160493827)
— lado mayor
dieciseisG :: Float -> Float
dieciseisG x = 16.0 / 9.0 * dieciseisP x

— Funciones calculo de los lados para 18:9
— Lado menor

dieciochoP :: Float -> Float
dieciochoP x = sqrt ((x ^2) / 5)
— lado mayor
dieciochoG :: Float -> Float
dieciochoG x = 18.0 / 9.0 * dieciochoP x
— Areas 16:9 y 18:9
areadieciseis :: Float -> Float
areadieciseis x = 0.427299703 * x^2
areadieciocho :: Float -> Float
areadieciocho x = 0.4 * x^2
— Porcentaje de pantalla
porciento :: Float -> Float
porciento x = (1 – (areadieciocho x / areadieciseis x)) * 100.0
— El mismo area para los dos formatos
equivalencia :: Float -> Float
equivalencia x = sqrt(0.4) / sqrt(0.427299703) * x
— Como se ve una pelicula 16:9 en un telefono 18:9
movie :: Float -> Float
movie x = dieciochoP x * 2.039728861
— Como se ven fotografias 3:2 en ambos formatos
foto16 :: Float -> Float
foto16 x = dieciseisP x * 1.802775638
foto18 :: Float -> Float
foto18 x = dieciochoP x * 1.802775638
main = do
— Entrada de datos en terminal numpulgadas
putStrLn “Diagonal”
n <- getLine
let numpulgadas = read(n)
— pulgadas a centimetros
let num1 = 2.54 * numpulgadas

— salida de datos en terminal

— Lados y area en ambos formatos
putStrLn ” Movil 16:9″
putStrLn (“Lado Menor ” ++ ( show ( dieciseisP num1 )) ++ ” cm” )
putStrLn (“Lado Mayor ” ++ ( show ( dieciseisG num1 )) ++ ” cm” )
putStrLn ( “Area 16:9 ” ++ ( show (areadieciseis num1 )) ++ ” cm²”)
putStrLn ” Movil 18:9″
putStrLn (“Lado Menor “++ ( show (dieciochoP num1 )) ++ ” cm” )
putStrLn (“Lado Mayor ” ++ ( show (dieciochoG num1)) ++ ” cm”)
putStrLn ( “Area 18:9 ” ++ ( show (areadieciocho num1 )) ++ ” cm²”)
— Equivalencias entre formatos para el mismo area
putStrLn ( “Porcentaje de area que es ” ++ (show (porciento num1)) ++ ” % mayor”)
putStrLn ( ( show (numpulgadas)) ++ ” pulgadas en 16:9 ” ++ ” equivalen a ” ++ (show (equivalencia numpulgadas) ) ++ ” pulgadas en 18:9″ )
— Perdida en pantalla debido a los diferentes formatos de video y foto
putStrLn ( “La diagonal equivalente para peliculas en 18:9 es ” ++ (show (movie numpulgadas)) ++ ” pulgadas”)
putStrLn (“La diagonal equivalente para foto 3:2 en 16:9 es ” ++ (show (foto16 numpulgadas ) ) ++ ” pulgadas”)
putStrLn (“La diagonal equivalente para foto 3:2 en 18:9 es ” ++ (show (foto18 numpulgadas ) ) ++ ” pulgadas”)

 

Haskell, instalación en Arch Linux

Acabo de comenzar mis primeros pasos con este lenguaje de programación, funcional y distinto a otros en sintaxis y conceptos.

Os dejare referencias bibliográficas para los que empezáis como yo, también un video de como descargar e instalar el compilador y el entorno de desarrollo.

En las siguientes entradas y con el fin de practicar Haskel, los script o pequeños programas ya no serán escritos en C++, se escribirán en Haskell.

Instalación.

En mi caso soy usuario de Antergos una distribución basada en Arch Linux y mostrare como podéis instalarlo. Dejare referencias de como instalarlo en otras distribuciones. Así como donde descargarlo para Windows y MacOS.

Es importante para los que empezamos instalar lo mas básico y necesario el compilador ghci y cabal. Posteriormente instalaremos stack que es su entorno de desarrollo y ademas os añadirá muchas librerías.

sudo pacman -S ghc cabal-install happy alex haddock

sudo pacman -S stack

 

Bibliografía.

Primeramente la principal fuente, su propia pagina: https://www.haskell.org/

En la wiki nos explica de donde surgió el lenguaje y una breve descripción sobre él. https://es.wikipedia.org/wiki/Haskell

En mi caso, los primeros pasos los he dado siguiendo esta web y con estos libros.

Destrucción Controlada. Tus archivos, sólo para ti.

Si queremos alojar algún archivo en la red, si alguien se lo descarga tendrá un tiempo ilimitado para poder hackear su cifrado.
Si el archivo es de nuestra propiedad, no solo lo podemos proteger con un cifrado estandar aes256 (o similar), sino que para aumentar dramáticamente su nivel de cifrado de forma muy sencilla. Usando estos dos métodos no tendremos nada que envidiar, a los niveles de encriptación militar.
Este método es para archivos privados donde no transmitiremos nuestra clave a nadie, ya que no es necesario.
La fortaleza de este método se basa, en romper una de las leyes del  cifrado,  una clave una sola solución. En nuestro caso haremos una clave con millones de millones de soluciones y además crearemos una clave, no de 128 bits, no de 256 bits, no de 512 bits sino de varios Kb o Megas. (Por que tu lo vales)

Consideraciones Importantes:

También es aconsejable si el archivo esta expuesto, usar un cifrado simétrico previo, consiguiendo así algo muy, muy desagradable de crackear.

El programa posterior leer archivos de modo binario, por lo que a pesar de ser imágenes en el ejemplo, en la realidad sirve para cualquier tipo de archivos.

Por último, para aumentar la seguridad al absurdo, no se debe usar siempre el mismo archivo de cifrado, han de ser parejas monogámicas. Quiero decir que cada archivo tendrá su pareja de cifrado única, impidiendo el posterior análisis criptográfico si subimos un numero grande de archivos con el mismo cifrado.

En el ejemplo hay una condición para simplificar el código y que sea más fácil de entender, El archivo de cifrado ha de ser mayor que el que se cifra. Con un par de lineas adicionales esta limitación desaparecería.

En el siguiente vídeo probaré el programa de ejemplo, para la imagen del logo de Antergos y posteriormente con un archivo cifrado mediante aescrypt. El código lo podéis modificar para vuestra conveniencia y recordar cuanto más aleatorio es el archivo de cifrado mas cerca del imposible esta su descifrado.

Ejemplo de cifrado/decifrado con Imágenes.

Ingredientes para la destrucción controlada:

  • Archivo a cifrar.
  • Archivo para cifrado de mayor tamaño al anterior.
  • Programa de cifrado y descifrado.

El ejemplo sera muy sencillo, lo mostraremos para una imagen,  que es más visual e intuitivo. Pero lo ideal es cifrar el archivo primero por un cifrado simétrico estándar y luego añadir muestra capa de destrucción controlada.

  • Archivo Foto.jpg, archivo Original en mi caso usare una de Antergos mi S.O.
    Foto.jpg
    Foto.jpg

     

  • Archivo para cifrar FotoKey.jpg
FotoKey.png
FotoKey.png

 

  • Programa Cifrado/descifrado.(Al usar XOR es prácticamente lo mismo)
#include<iostream>
#include<fstream>
using namespace std;
// El programa encripta origen mediante cifrado XOR con origen2
// origen 2 debe ser mayor que origen en esta versión
// El resultado se escribirá en destinoint
main(){// Abrimos los ficheros origen y origen2 en modo lectura
// Abrimos destino en modo estritura
// puedes cambiar Foto.jpg , FotoKey.png, CopiaSegura.jpg por los que tu quieras
ifstream origen(“Foto.jpg”,ios::binary);
ifstream origen2(“FotoKey.png”, ios::binary);
ofstream destino(“CopiaSegura.jpg”,ios::binary);
// Defino las Variables Byte (origen) key(origen2)
// a,b,c se usarán para el cálculo XOR
char byte;
char key;
int a,b,c;
// Creamos un bucle para la lectura de datos
while( !origen.eof() && !origen.fail() && !origen2.eof() && !origen2.fail()){
origen.read((char *) & byte, sizeof(char));
origen2.read((char *) & key, sizeof(char));
if (origen.good()){
//Creo la máscara con XOR
a = int(byte);
b = int(key);
c = a ^ b ;
byte = char(c);
// Escribimos en el archivo de salida
destino.write((char *) & byte, sizeof(char));
}
}
// Cerramos los tres archivos
destino.close();
origen2.close();
origen.close();
return 0;
}

 

El programa esta en C++, para compilarlo y ejecutarlo desde el terminal:

 

[nukebull ]$ c++ -o CifradoXOR CifradoBinario.cpp
[nukebull]$ chmod +x CifradoXOR
[nukebull]$ ./CifradoXOR

 

Para descifrar es el mismo programa cambiando [Foto.jpg por CopiaSegura.jpg ) y (CopiaSegura.jpg por CopiaDescifrada.jpg), FotoKey.png no se altera

 

#include<iostream>
#include<fstream>
using namespace std;
// El programa encripta origen mediante cifrado XOR con origen2
// origen 2 debe ser mayor que origen en esta versión
// El resultado se escribirá en destino
int main(){
// Abrimos los ficheros origen y origen2 en modo lectura
// Abrimos destino en modo estritura
// puedes cambiar Foto.jpg , FotoKey.png, CopiaSegura.jpg por los que tu quieras
ifstream origen(“CopiaSegura.jpg”,ios::binary);
ifstream origen2(“FotoKey.png”, ios::binary);
ofstream destino(“CopiaDescifrada.jpg”,ios::binary);
// Defino las Variables Byte (origen) key(origen2)
// a,b,c se usarán para el cálculo XOR
char byte;
char key;
int a,b,c;
// Creamos un bucle para la lectura de datos
while( !origen.eof() && !origen.fail() && !origen2.eof() && !origen2.fail()){
origen.read((char *) & byte, sizeof(char));
origen2.read((char *) & key, sizeof(char));
if (origen.good()){
//Creo la máscara con XOR
a = int(byte);
b = int(key);
c = a ^ b ;
byte = char(c);
// Escribimos en el archivo de salida
destino.write((char *) & byte, sizeof(char));
}
}
// Cerramos los tres archivos
destino.close();
origen2.close();
origen.close();
return 0;
}

 

El programa esta en C++, para compilarlo y ejecutarlo desde el terminal:

 

[nukebull ]$ c++ -o CifradoXORInv CifradoBinarioInverso.cpp
[nukebull]$ chmod +x CifradoXORInv
[nukebull]$ ./CifradoXORInv

 

Programa

Conclusión.

Usar esta segunda capa de cifrado produce una destrucción de los datos del programa, si el original estaba cifrado, reconstruirlo es prácticamente imposible. Para archivos sensibles que estén expuestos es ideal, ya que el criptoanálisis que le pudieran hacer, se lo hacen a un archivo incompleto del que no saben que tipo de cifrado se ha usado o con que  programa se ha encriptado.

El código se puede mejorar pidiendo los archivos desde consola, o añadiendo algún tipo de GUI. Pero en lo básico seguirá siendo similar.

Espero que les sirva de ayuda y deja un comentario si deseas alguna aclaración. Gracias

 

Generación de Claves (Terminal-Linux)

En la entrada vamos a generar claves de forma rápida y sencilla desde la terminal usando las funciones hash (sha256, sha512,sha1, md5). También añadiremos un nuevo comando al bash para automatizar el proceso.

Lo más aconsejable es usar sha512 al ser la de mayor complejidad. Veremos varias formas combinadas con diferentes comandos

  • Junto con el comando date (lo bueno de esta función es que cambia el valor en el tiempo)
[nukebull@]$ date
jue oct 4 20:02:25 CEST 2018
[nukebull]$ date | sha256sum
07ef00e6a72dc78e7109b93d92d94f71a8ca05ef7f9da1d18904634d5fcdd457 –
[nukebull]$ date | sha512sum
be3a8132ff936b12981c7888dc5a189df3ab1699be2ce19bdcea8e1eede5289c0
41e1d4a8a7efbd2d98679bef961bc7e146565b1bfec8268a167cede03fc2f51 –
[nukebull]$ date | md5sum
cf6c4a3551301c72103b1a29903adb09 –
[nukebull]$ date | sha1sum
976b418e17f5621c264a41323196fa0fa63a0a69 –
  • Junto con el comando echo -n “texto” 
[nukebull]$ echo -n “Mi contraseña hash” | sha1sum
28bd1dece4147de7f25a5ecdba8872e5deecdc26 –
[nukebull]$ echo -n “Mi contraseña hash” | sha512sum
d44bfbe4dec8b149ddc438ec69f71a000f4f5aa7c5b9eeefb212a945008bb7ebd2d635
6a73fa3fa5bc922154b462389ef2f2a6d0a4d8c605010ee8fce214a8ed –
  • Junto con echo $RANDOM (genera números aleatorios ente 0 y 32768).
[nukebull]$ echo $RANDOM $RANDOM
8724 10900
[nukebull]$ echo $RANDOM $RANDOM |sha256sum
30218b9fc9b7d5f44b907f78f98efc8d2e8ec27113412639ea93fbd672dd787e –
  • Concatenar varias funciones para añadir complejidad.
[nukebull]$ echo -n “clave” | sha256sum
6d5074b4bf2b913866157d7674f1eda042c5c614876de876f7512702d2572a06 –
[nukebull]$ echo -n “clave” | sha256sum | sha512sum
30b1c140080d445363ad4f8dc0e3e4aeaa7568c66a523f124c554dd65a8e09f002cfc2104
a5bf2814a75a86d3d80d70170d21b4728acbf0fc674f82e563c0726 –
[nukebull]$ date | sha256sum | sha512sum | sha1sum
72a28a36231b2b77c5cd99e7d6cd5595ac90298e –
[nukebull]$ date | sha256sum | sha1sum | sha512sum
3697e91afa2dc6f226b2e4e6a299136d52339e4f5ca779aef3ff267f0e4fdda4f182099331
dc5586e3081b12a7c87187be6c06ce30f4b5b1de0719d14d108a47-

[nukebull]$echo $RANDOM `date` $RANDOM
12333 jue oct 4 20:37:06 CEST 2018 6565
[nukebull]$ echo $RANDOM `date` $RANDOM | sha1sum | sha256sum | sha512sum
e445f15b12fa637c7b01df9af73303e7f97bfa294b952f3bb8d996d144d34ec642ac28fb9802db6dcdcbb55172
c74243971077c6e24a08a70c3d43bbcf498ea0 –

Por último os mostrare como se añade al bash si lo utilizáis constantemente. como ejemplo usaré un alias llamado  keygen y una de las funciones anteriores basada en date que varia en el tiempo, generando nuevas claves en cada ocasión

  • Primeramente buscaremos el archivo .bashrc en el directorio principal de nuestro usuario (/home/usuario).
  • Lo editaremos con nano, vin , emacs, gedit (ejemplo)
[nukebull]$ gedit .bashrc
  • Añadimos linea alias keygen =”date | sha256sum | sha1sum | sha512sum ”  
  • Cerramos la terminal, para que al volverla a abrir cargue el nuevo comando en la terminal
gedit .bashrc
gedit .bashrc
  • Ejecutamos el comando en la nueva terminal.
[nukebull]$ keygen
300e7434fc6cd7c17dc757bea6bcd198896953e2572463ffe809fb227d5491fe14
fc5a6d4d5e29805474be09eb3d8d9238e0ba81ed74cac9b326d53de27cf3f3 –
[nukebull]$ keygen
e5750e3c9eba0e31afe0f57862d7613b3de689bbc4f796066b476871a5436d7be2
6604d90e1f86cc838b260cccacfa33e34a441977258b9699e67f00dabc17b8 –
[nukebull@]$ keygen
f8bd4661d25f4c59696c1eb345589a4363af5412f8a58b2cd98c25da20c02ee63ca
471621a3153c5c4ca3d5f9ff44fb6b73f6dce2a1b5b386b2c9d235c1fc2b4 –

 

Steghide, mensajes ocultos (Esteganografía)

La esteganografía (del griego στεγανος steganos, “cubierto” u “oculto”, y γραφος graphos, “escritura”) trata el estudio y aplicación de técnicas que permiten ocultar mensajes u objetos, dentro de otros, llamados portadores, de modo que no se perciba su existencia. Es decir, procura ocultar mensajes dentro de otros objetos y de esta forma establecer un canal encubierto de comunicación, de modo que el propio acto de la comunicación pase inadvertido para observadores que tienen acceso a ese canal. (wiki)

El cifrado digital de mensajes tiene una variante que consiste en introducir un mensaje dentro de otro medio para que este pase desapercibido. Se utilizan imágenes, audios y vídeos. Cualquier medio digital es susceptible de portar mensajes.

 

Descripción del programa

Trabajaremos con Steghide, aplicación  para Linux, que  desde el terminal nos permitirá ocultar mensajes cifrados en archivos JPEG, BMP, WAV. En nuestro caso usaremos una imagen jpg. El software ha sido desarrollado gracias a la iniciativa de Stefan Hetzl y se aloja en la siguiente dirección: http://steghide.sourceforge.net/index.php

Para saber mas sobre ella nos fijaremos en sus dependencias:

  • libmhash Contiene los algoritmos tipo hash para generación de contraseñas. y archivos de verificación.
  • libmcrypt  Esta librería contiene algoritmos simétricos comunes como son: aes, twofish,…
  • libjpeg Nos dará la capacidad de comprimir y descomprimir imágenes.
  • zlib Libreria para comprimir y descomprimir mensajes.

Además tenemos el manual en Ingles y castellano gracias a la traducción de  “Alberto Adrián Schiano” (Muchas gracias por tu gran trabajo) Manual

Como usar steghide

Los ejemplos que mostrare a continuación se realizan sobre la imagen Descanso.jpg, también crearemos un archivo de texto (Mensaje.txt) con el mensaje que deseamos esconder. El programa podéis instalarlo del repositorio de vuestra distro.

Imagen Original

Sin mensaje oculto

Primer comando steghide –encinfo nos muestra todos los algoritmos disponible (heredados de la libreria libmcrypt)

[Steghide]$ ls
Descanso.jpg Mensaje.txt[Steghide]$ steghide –encinfo
algoritmos d/encriptado:
<algoritmo>: <formas reconocidas>…
cast-128: cbc cfb ctr ecb ncfb nofb ofb
gost: cbc cfb ctr ecb ncfb nofb ofb
rijndael-128: cbc cfb ctr ecb ncfb nofb ofb
twofish: cbc cfb ctr ecb ncfb nofb ofb
arcfour: stream
cast-256: cbc cfb ctr ecb ncfb nofb ofb
loki97: cbc cfb ctr ecb ncfb nofb ofb
rijndael-192: cbc cfb ctr ecb ncfb nofb ofb
saferplus: cbc cfb ctr ecb ncfb nofb ofb
wake: stream
des: cbc cfb ctr ecb ncfb nofb ofb
rijndael-256: cbc cfb ctr ecb ncfb nofb ofb
serpent: cbc cfb ctr ecb ncfb nofb ofb
xtea: cbc cfb ctr ecb ncfb nofb ofb
blowfish: cbc cfb ctr ecb ncfb nofb ofb
enigma: stream
rc2: cbc cfb ctr ecb ncfb nofb ofb
tripledes: cbc cfb ctr ecb ncfb nofb ofb

También es recomendable para saber el espacio que tenemos para ocultar el mensaje,

steghide –info Descanso.jpg

[Steghide]$ steghide –info Descanso.jpg
“Descanso.jpg”:
formato: jpeg
capacidad: 9,6 KB
Intenta informarse sobre los datos adjuntos? (s/n) n

¿Como introducir mensaje.txt en Descanso.jpg ?

Nos pedirá una contraseña desde el terminal (-cf fichero contenedor, -ef fichero embebido )

steghide embed  -cf Descanso.jpg -ef Mensaje.txt

Añadimos algunos argumentos para su funcionamiento

  • -z para el nivel de compresión (1-9)
  • -e tipo de algoritmo,
  • -p contraseña (passphrase).
  • -v información detallada (verbose).

steghide embed -e rijndael-256 -z 9 -v -p nukebull -cf Descanso.jpg -ef Mensaje.txt

[Steghide]$ steghide embed -e rijndael-256 -z 9 -v -p nukebull -cf Descanso.jpg -ef Mensaje.txt
leyendo archivo secreto “Mensaje.txt”… hecho
leyendo archivo d/portada “Descanso.jpg”… hecho
creando el gr�fico… 154 valores d/muestra, 567 v�rtices, 104113 bordes
ejecutando Static Minimum Degree Construction Heuristic… 99,8% (1,0) hecho

El proceso de extracción  lo realizaremos utilizando (-sf fichero esteganográfico) y nos creara el fichero oculto en la carpeta que ejecutemos.

esteghide extract -sf Descanso.jpg

[Steghide]$ steghide extract -sf Descanso.jpg
Anotar salvoconducto:
anot� los datos extra�dos e/”Mensaje.txt”.[Steghide]$ steghide –info Descanso.jpg
“Descanso.jpg”:
formato: jpeg
capacidad: 9,6 KB
�Intenta informarse sobre los datos adjuntos? (s/n) s
Anotar salvoconducto:
archivo adjunto “Mensaje.txt”:
tama�o: 59,0 Byte
encriptado: rijndael-256, cbc
compactado: si

Imagen Esteganográfica

password nukebull

Notas Importantes

  • Al subir imágenes a twiter, wassap, telegram,.. le aplican un algoritmo para comprimir jpg que destruye el menaje oculto. (comprobado)
  • Para no destruirlo lo podéis subir a Google Drive  (comprobado) Enlace G. Drive
  • La imagen subida en una pagina web también conserva el mensaje. La de esta pagina sirve de ejemplo.

Podcasting – Podcast

El podcasting o podcast consiste en la distribución de archivos multimedia (normalmente audio o vídeo que suelen ser de larga duración, que pueden incluir texto como subtítulos y notas) mediante un sistema de redifusión (RSS) que permite opcionalmente suscribirse y usar un programa que lo descarga para que el usuario lo escuche. (wikipedia)

Es una alternativa a la radio convencional, sobre todo en  temas que comercialmente no atraen a las grandes emisoras. En nuestro caso, el software libre, linux,.. prácticamente no es difundido por emisoras convencionales. Ademas muchos podcast no están sujetos a la censura institucional, espesando conocimientos y opiniones de una forma más libre
Existen muchos programas que nos permitirán automatizar las suscripciones y así poder escuchar a nuestros podcaster favoritos según añadan contenido. A continuación mostraré algunos programas para escuchar podcast. Y en sucesivas entradas haré referencia a alguno de mis podcaster favoritos.

Programas (Linux)

gPodder (https://gpodder.net/ )

Se instala desde el repositorio de la mayoría de distribuciones. Y te permite bajar los audios a tu pc para escucharlos posteriormente.

Programas para el Teléfono.

Las aplicaciones son similares y muy fáciles de utilizar. Nos permiten gestionar nuestros Podcast/Podcaster favoritos, la segunda y tercera ademas de la versión gratuita tienen una premium con más funciones.

Google Podcast
Pertenece a Google es gratuito y se integra perfectamente en  Android.

 

iVoox
Valido para iPhone y Android, tiene una suscripción premium con mayor calidad de audio.

 

CastBox
Similar a iVoox y también tiene suscripción premium si se desea.

Programas para el Navegador.

Tanto iVoox (https://www.ivoox.com/) como CastBox (https://castbox.fm/) tienen versión para tu navegador desde su página web.

También muchos podcast tienen su propia página desde la que podréis descargaros sus archivos en distintas calidades de audio.

 

Bibliografia.

https://es.wikipedia.org/wiki/Podcasting