lunes, 5 de mayo de 2008

Cifrando los datos de un pendrive

Acostumbramos a llevar en nuestros pendrives información privada. El problema es que estos dispositivos tienen una tendencia especial a perderse :P.

Una posible solución es cifrar el sistema de ficheros del pendrive, desgraciadamente la mayoría los tenemos formateados en FAT y este sistema no admite cifrado.

Ningún problema para nosotros, si no admite cifrado el sistema de ficheros, pues nos hacemos un programa que lea el dispositivo en linux y lo cifre todo haciendo a los datos XOR con nuestra clave.

#include<stdio.h>

#define PENDRIVE "/dev/sdb1"
#define BUFFERSIZE 4096

int main(){
int i, j, leido, nBytes;
FILE *fichero;
int buffer[BUFFERSIZE];

fichero=fopen(PENDRIVE, "rw+");

//Hallar el tamanio del fichero
fseek(fichero, 0, SEEK_END);
nBytes=ftell(fichero);
fseek(fichero, 0, SEEK_SET);

//Leer,escribir y encriptar el fichero/dispositivo
for(i=0;i<nBytes;i+=BUFFERSIZE){
leido=fread(buffer, 1, BUFFERSIZE, fichero);
fseek(fichero, -leido, SEEK_CUR);

for(j=0;j<leido;j++) buffer[j]=buffer[j]^0x12345678;

fwrite(buffer, leido, 1, fichero);

if(i%(BUFFERSIZE*1000)==0){
printf("%.1f%\n",(i*100.0)/nBytes);
}
}

fclose(fichero);
}

En este caso la clave es 0x12345678 (en hexadecimal), y el dispositivo /dev/sdb1.
Sirve tanto para pendrives, disquetes, ficheros, todo en linux es un fichero.
Para desencriptarlo tan solo hay que volver a ejecutar el programa.

Si alguien intenta leer los datos del pendrive cuando están cifrados, simplemente parecerá que el pendrive no tiene formato ya que también se encripta la tabla FAT.

Evidentemente el algoritmo de encriptación se puede mejorar, tan solo es una idea.

0 comentarios: