Mostrando entradas con la etiqueta cifrado. Mostrar todas las entradas
Mostrando entradas con la etiqueta cifrado. Mostrar todas las entradas

lunes, 12 de diciembre de 2016

Cómo cifrar y descifrar archivos y directorios en Linux



Existen muchas maneras de cifrar un archivo o directorio en Linux, pero quizás la más común es usar GNU Privacy Guard (GnuPG o GPG), la implementación libre del estándar OpenPGP. Entre sus características destacan:

- Mejor funcionalidad que PGP y algunas mejoras de seguridad sobre PGP 2.
- Descifra y verifica los mensajes PGP 5, 6 y 7.
- Soporta ElGamal, DSA, RSA, AES, 3DES, Blowfish, Twofish, CAST5, MD5, SHA-1, RIPE-MD-160 y TIGER.
- Fácil implementación de nuevos algoritmos utilizando módulos de extensión.
- Soporta fechas de caducidad de claves y firmas.
- Soporta múltiples idiomas

Hoy vamos a ver algunos ejemplos para cifrar tanto ficheros como directorios con gpg, además de otras alternativas.

Cifrando archivos con una contraseña

En primer lugar para cifrar un fichero con gpg simplemente tendremos que escribir en nuestra consola: 

gpg -c file.to.encrypt

Con la opción "-c" usaremos un cifrado simétrico usando una contraseña o passphrase. El cifrado simétrico por defecto es CAST5 pero podemos usar cualquiera de los disponibles con la opción -cipher-algo. Además, podemos combinar esta opción con -sign para firmar el mensaje, -encrypt para cifrar el mensaje mediante una passphrase o clave privada, o usar ambos simultáneamente.

Luego, para descifrar el fichero simplemente ejecutaremos:

gpg file.to.encrypt.gpg

Cifrando archivos con una clave privada

Antes de nada si queremos usar cifrado simétrico tendremos que crearnos un par de claves (privada/pública):

gpg --gen-key

root@server:/# gpg --gen-key
gpg (GnuPG) 1.4.20; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 2y
Key expires at lun 10 dic 2018 06:36:08 CET
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: vmotos
Email address: hackplayers@ymail.com
Comment: poc
You selected this USER-ID:
    "vmotos (poc) <hackplayers@ymail.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

Repeat passphrase: 

Durante el proceso de creación de las claves es importante seleccionar una passphraserobusta, la cual se nos pedirá sólo cuando descifremos algo.

Una vez que haya suficientes bytes aleatorios disponibles, se generarán las claves. Pero la disponibilidad de suficientes bytes aleatorios no es una tarea fácil. Por lo que para tener rápidamente la suficiente entropía podemos ejecutar en otra consola:

ls -l /dev/urandom
rngd -r /dev/random

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 186 more bytes)
...........+++++
.........+++++
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 82 more bytes)
...+++++

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 109 more bytes)
...+++++
gpg: /home/vmotos/.gnupg/trustdb.gpg: trustdb created
gpg: key 593G622F marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2018-12-10
pub   2048R/593F628F 2016-12-10 [expires: 2018-12-10]
      Key fingerprint = 1159 84C6 56E2 C9F8 C036  D545 395D AFD1 593F 628F
uid                  vmotos (poc) <hackplayers@ymail.com>
sub   2048R/B132791F 2016-12-10 [expires: 2018-12-10]

Una vez generado el par de claves, para exportar la clave pública ejecutaremos el siguiente comando:

gpg --armor --output public-key.txt --export 'vmotos'

cat public-key.txt 
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1

mQENBFhLlMMBCACp239DyzlvfqOuzaOgZQfuXbCUPXcXuqjow8mrCLLjwN1v7R6c
H+XcH3gezTf4R8SNUZu1LFp39ErANiEiH8C67Yj6AyKIfxJdsQ1EYU3AhQvZgX+9
tSUNLl3+qZB0oA6KggOptrYepCjSemx9VIp2zbrMUN6YG9r0eRRCFqfWlTtkOE4f
3mzWBzxZA1znZb7j2JUhrdFKXn1X64qR3Gu2gs3lkZ1bVAVRubiUXvA/PxGuOxl0
OUNguSGInYHKy3OiHVKkW7GPeNhbKDhhC6V29AnsYp24owVAf1A/qngqPeWk8x7Q
SuUD6Qs6iaD1wNM2wdh/PACho0vByUZf47RJABEBAAG0JHZtb3RvcyAocG9jKSA8
aGFja3BsYXllcnNAeW1haWwuY29tPokBPgQTAQIAKAUCWEuUwwIbAwUJA8JnAAYL
CQgHAwIGFQgCCQoLCBYCAwECHgECF4AACgkQOV2v0Vk/Yo/aqwf/VO/6gz3mcbv8
9k+ggI11ThehvC3W5wG4/jaD2YIlkXNeAyOw8L9ZkflQO4D4OziBJo9j1IUGiIjy
EOgPiwzFcVk6y5cCtT/ItgCT4Wyz30Osr+w52GyEx2hh82d6aGqfqlYYXz5X3LID
NNxuSfgr4DrkAaAlw1uBtLjF671lSm1fYHsSjRaf6YDltDFsJdSbDHt1ZXt2m9F7
TwhShfwq7mxTuVtaPyGXofHWq+kxAeBUz4u/QXlDmXGZ6zoymE4zaqLBwzEHeTzF
CMm7IXKqcU28iCTAghT/EAUjzDlN5u8gSjl2PeOAkgHIIcj+owJMeWO7CGqg2Dy6
DRccAIAjXLkBDQRYS5TDAQgAvRQ78ytZrqrmos+Ics6OCMweZ7UrVIcFsoz3SV6P
j3wn85UOlkCluVbiBySUTw0cpoW13JXbvhY/VBmtdpVdagllKxTkaGdr/njegwtB
QuwceC0Avq2BT233C8OuH2n8z62co3H2oSzI87TcSb5+bLtoZyHrgIYTexNAo9Zp
kGJPix7jwFSC8Hu+hP3UWuJo3gXi/EYksWGlCFJrxVQkNXpXoMnQycCC6nqPRMne
F/HOyS9U5+FdtaVIooalOj7vVzmS9UL5y0Eoc4Yjma36YU9IqDNPprcMdRlbIbwl
9EhQiikX1Wdxvmf47oyua7+1LqjgcCaer+ZBXo3a02n9WwARAQABiQElBBgBAgAP
BQJYS5TDAhsMBQkDwmcAAAoJEDldr9FZP2KP730H/A+TLCD2tNq2gHA9r9SNOitQ
K/5ASdZ2gAsWrWS6FKDHzk3vsfUCJubAd80R/7zxGT9ihy4xKwpQapVhI1pqxNGT
E/upsryMnYw5/yUZbEWTVlD/XvxvsqYCJRyxW3BwTtU47zSMuOJHTqfOY1DGFHga
ixednhfjBCHiTgL1etJ29NioRBtsMadY9D34y9B9k789ZR2jh0ImwxEGW2RmxHLI
9nPuzyyGfQVjnkQos8/s4WM5zBuQx9FxUyCERK2QAt63vie229IQMuWFPpH7nN3G
o46X0BSBsuD0B2qIduSpjVEfPztw5sdclXU/lf05cfZRR+GJrmB7TnPhSCCJoG0=
=SvAM
-----END PGP PUBLIC KEY BLOCK-----

Dicha clave pública tendrá que ser importada en sistema al que enviaremos el archivo cifrado:

gpg --import public-key.txt

gpg --list-keys
/home/vmotos/.gnupg/pubring.gpg
-------------------------------
pub   2048R/593F628F 2016-12-10 [expires: 2018-12-10]
uid                  vmotos (poc) 
sub   2048R/B152791F 2016-12-10 [expires: 2018-12-10]

Finalmente, para cifrar el archivo con cifrado asimétrico escribiremos en la consola:

gpg --encrypt --recipient 'vmotos' archivo.txt

Y obtendremos el dichero archivo.txt.gpg cifrado para enviarlo al servidor donde previamente habíamos enviado e importado la clave pública.

Para descifrarlo:

gpg -d -o ~USERNAME/decrypted ~USERNAME/filename

Y por último, para cifrar múltiples archivos automáticamente podemos usar un sencillo script, como por ejemplo:

#!/bin/bash
line="/home/myself/Whatever/found.txt"
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Text read from file: $line"
    gpg2 -e -u mysecretkeyID -r mysecretkeyID "$line"
  done < "$1"

Cifrando directorios

Si queremos cifrar directorios podremos combinar este comando con tar, como se muestra en los siguientes casos:

tar zcvf - /tmp/directory | gpg -c > /tmp/directory.tar.gz.gpg
 

tar c project1.7z project2.7z | gpg --cipher-algo AES256 --compression-algo BZIP2 -co projects.gpg
 

tar -c foldername | gpg2 -e > folder.tar.gpg

O podemos usar gpg-zip. Por ejemplo, ciframos los contenidos del directorio mydocs al fichero test1 con el usuario Bob:

gpg-zip --encrypt --output test1.gpg --gpg-args  -r Bob mydocs

Para listar los contenidos del archivo test1:

gpg-zip --list-archive test1.gpg

Y para descifrarlo:

gpg-zip -d test1.gpg

Otra alternativa bastante popular es ecryptfs. Para instalarlo en debian/ubuntu:

sudo apt-get install ecryptfs-utils

Después crearemos un directorio "Private" de tal manera que cualquier dato que pongamos en el mismo será automáticamente cifrado cuando cerremos sesión y descifrado cuando hagamos login:

ecryptfs-setup-private

Si queremos seleccionar un directorio diferente...

mkdir ~/secret
chmod 700 ~/secret

sudo mount -t ecryptfs ~your_user/secret ~your_user/secret

Ponemos nuestros datos en ~/secret

Para cifrar:

sudo umount ~your_user/secret

Para descifrar:

sudo mount ./secret ./secret -o key=passphrase,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,

ecryptfs_passthrough=no,ecryptfs_enable_filename_crypto=yes

Otras alternativas:

- openssl

Cifrar:

openssl des3 -salt -in unencrypted-data.tar -out encrypted-data.tar.des3

Descrifrar:

openssl des3 -d -salt -in encrypted-data.tar.des3 -out unencrypted-data.tar

Abrir un directorio cifrado:

openssl enc -aes-256-cbc -d -in ~/vault.tar.gz.dat | tar xz; thunar ~/vault

Bloqueando un directorio cifrado:

tar cz vault/ | openssl enc -aes-256-cbc -out ~/vault.tar.gz.dat; rm -r ~/vault

- Aescrypt

Cifrar:

aescrypt -e -p password  file.jpg

Descifrar:

aescrypt -d -p password file.jpg.aes

- mcrypt

Cifrar:

mcrypt "File"

Descifrar:

mcrypt -d "File"

- zip

Comprimir y cifrar:

zip file.zip file
zip -r directory.zip directory
zip --encrypt file.zip.enc file # prompt for password
zip --encrypt -r directory.zip.enc directory # prompt for password

Descomprimir y cifrar:

unzip directory.zip.enc #Beware if any directory is present with the same name as the zipped file, then it would be overwritten. Hence I normally send the contents to another directory.
unzip directory.zip.enc -d directory-new # prompts for password

- ccrypt

Combinándolo con tar:

tar cvvjf - /path/to/files | ccrypt > backup.tar.bz2.cpt

Único comando:

ccrypt backup.tar.bz2

Para automatización, también permite guardar la passkey en un fichero y usarla para cifrar:

ccrypt -k ~/.passkey backup.tar.bz2

- bcrypt
   
bcrypt ~/Desktop/Tecmint/tecmint.txt
bcrypt tecmint.txt.bfe

- 7-zip


$ 7za a -tzip -p -mem=AES256 tecmint.zip tecmint.txt tecmint1.txt
$ 7za e tecmint.zip

- nautilus 

GUI



Fuentes:

http://askubuntu.com/questions/98443/encrypting-files-and-folder-through-terminal
http://unix.stackexchange.com/questions/43846/encrypt-multiple-files-at-once
http://superuser.com/questions/249497/how-to-encrypt-a-file-or-directory-in-linux
http://www.everything-linux-101.com/how-to/how-to-encrypt-and-decrypt-files-folders-in-linux-using-gnupg/
https://www.cyberciti.biz/tips/linux-how-to-encrypt-and-decrypt-files-with-a-password.html
http://superuser.com/questions/370389/how-do-i-password-protect-a-tgz-file-with-tar-in-unix
http://statistics.berkeley.edu/computing/encrypt
http://www.tecmint.com/linux-password-protect-files-with-encryption/

viernes, 20 de mayo de 2016

Cómo firmar digitalmente los correos enviados desde Yahoo o Gmail.

Cada vez surgen nuevos y más sofisticados ataques de phishing o de suplantación de identidad mediante correos electrónicos fraudulentos que intentan engañar a los usuarios. El objetivo es que faciliten información confidencial, o que sigan un enlace e introduzcan sus credenciales en un portal falso, o que abran un fichero adjunto y se infecten, etc.

Por eso hoy en día es de vital importancia firmar digitalmente los mensajes, para dar al destinatario la posibilidad de comprobar su autenticidad e integridad. 


No voy a entrar en el detalle dequé es y cómo funciona la firma electrónica pues no es objeto de esta entrada que pretende ser principalmente práctica. Sólo recordaros que, a grandes rasgos, para firmar un mensaje se calcula su hash (message digest) y se firma con la clave privada del remitente. El resultado es la firma digital que se adjunta en el mensaje al enviarlo para que el destinatario pueda comprobarlo mediante su clave pública correspondiente, tal y como se muestra en la imagen de la derecha.

Si el destinatario no dispone de la clave pública del remitente este último puede también adjuntarlo en el mensaje, eliminando así la necesidad del intercambio manual previo o el acceso a una PKI, GAL o keyserver público, a diferencia que con el cifrado (asimétrico) que si necesitaría si o si y previamente la clave pública del destinatario. 

Es decir, tenemos la posibilidad de firmar digitalmente y de forma fácil nuestros mensajes para darle a nuestros contactos la posibilidad de comprobar quién ha enviado un correo somos realmente nosotros.

Entonces, ¿por qué no firmar nuestros correos si podemos hacerlo de manera gratuita, en unos sencillos pasos e incluso con las cuentas de correo de Yahoo o Gmail que usamos a diario? Veamos cómo hacerlo.


Obtención del certificado SSL

Primero necesitamos un certificado firmado por una CA pública y confiable y, a ser posible, gratis para uso personal ;) 


Esto nos lleva a Let's Encrypt o StartSSL. 

En esta entrada utilizaremos uno de clase 1 de StartSSL, así que accederemos ahttps://www.startssl.com/ y pincharemos en 'Start Now for Free SSL Certificate': 


Luego pulsaremos el botón 'Sign up' para iniciar un enrollment que nos llevará poco más de 1 minuto de nuestro tiempo y con el que conseguiremos el certificado (S/MIME):

  
Después introducimos el país y nuestra dirección de correo. Llama la atención que hay algunos dominios baneados, aunque he podido generar un certificado para una cuenta de Anonbox.net sin problemas... 

Pero hagámoslo bien y para el ejemplo utilizamos la dirección de correo de Yahoo de Hackplayers:

A continuación recibiremos un código de verificación que tenemos que introducir en el formulario.

Automáticamente se nos instalará en el navegador el certificado generado y podremos autenticarnos en la página con dicho certificado:





El último paso será hacer una copia del certificado en formato pkcs12 (.p12) para luego importarla en el cliente de correo. 

En Firefox tendremos que abrir la opciones e ir a la pestaña de Certificados en Avanzado y pulsar el botón "Hacer copia", eligiendo una contraseña de respaldo y el nombre del fichero deseado.


Configuración del cliente de correo

La mayoría de los servicios de webmail no permiten configurar certificados ni clasificar mensajes firmados, Gmail y Yahoo no son excepciones. Además si reciben un mensaje firmado suelen mostrar un email vacío con un adjunto smime.p7s (el cual contiene realmente el mensaje). Por ello necesitaremos un cliente de correo compatible con S/MIME o PGP, ambos estándares para criptografía de clave pública y firmado de correo electrónico. 

En mi caso y siguiendo con la "familia Mozilla" utilizo Thunderbird que puede configurarse perfectamente con cuentas de Yahoo y Gmail.

Sólo hay que ir a la configuración de la cuenta y en la parte de seguridad importar el certificado:


y seleccionarlo para el firmado digital:


Finalmente a la hora de redactar un mensaje podremos ver que el mensaje será firmado tal y como lo hemos configurado:


Y el receptor podrá comprobar en su cliente (compatible con S/MIME) que realmente el remitente es ser quién dice ser...


Próxima estación... cifrado, pero eso ya será otra historia...

martes, 2 de febrero de 2016

la NSA habla de la importancia del cifrado.

El cifrado es fundamental para el futuro“. La frase podría parecer más propia de defensores de la privacidad, pero provino de alguien que no asociaríamos con esa misión: la hizo el director de la NSA, Mike Rogers. De hecho, debatir si debíamos o no tener privacidad era para él “una pérdida de tiempo“.






“El cifrado es fundamental para el futuro“. La frase podría parecer más propia de defensores de la privacidad, pero provino de alguien que no asociaríamos con esa misión: la hizo el director de la NSA, Mike Rogers. De hecho, debatir si debíamos o no tener privacidad era para él “una pérdida de tiempo“.


Las declaraciones del máximo responsable de la agencia que lleva espiándonos durante años son sorprendentes desde luego: este es el organismo que precisamente ha invertido miles de millones de dólares en descifrar todo tipo de comunicaciones y protocolos de seguridad, así que ¿qué significa la defensa del cifrado por parte de la NSA?


>El FBI y la NSA enfrentados en este debate
> ¿Puede la NSA romper cualquier cifrado?
> Hacking gubernamental


Diversos gobiernos de países occidentales han abogado por la inclusión de “puertas traseras” en comunicaciones cifradas para que diversas agencias y organismos de inteligencia puedan acceder a esas comunicaciones en caso de necesidad.


Las grandes de la tecnología, encabezadas por Apple, han dejado claro que debilitar este tipo de sistemas de cifrado es un grave error, pero aún así muchos insisten en que estas medidas dificultan el trabajo que pretende evitar actos terroristas.


James Comey, director del FBI, era especialmente crítico con este tipo de protección, algo que era de esperar de una agencia que se dedica a intentar saberlo todo de todos. Y sin embargo Rogers se declaraba contrario a ese tipo de posibilidad y hablaba de cómo ese debate de sacrificar privacidad a cambio de seguridad no era el adecuado. Ambas, decía, son primordiales:


“La preocupación respecto a la privacidad nunca ha sido más importante. Tratar de hacerlo todo bien, darse cuenta de eso, significa no centrarse en una o en otra. Ni la seguridad es tan imperativa que debamos centrarlo todo en ella, ni la privacidad tampoco. Tenemos que lidiar con estos dos requisitos.”


Las declaraciones de Rogers podrían apuntar a otra posibilidad: que la agencia ya fuera capaz de romper el cifrado de prácticamente cualquier comunicación. Eso haría innecesario tener que obligar a los usuarios a no poder aprovecharlo, y a la NSA le daría igual porque cifradas o no, esas comunicaciones estarían a su alcance para ser escrutadas.


Como revelan en The Next Web, un estudio (PDF) de varios organismos a finales del año pasado revelaba que ningún cifrado actual parece invulnerable.


La misma conclusión podría desprenderse de la entrevista mantenida por editores de Xataka con Phil Zimmermann el año pasado. En ella el creador del protocolo PGP para la protección de todo tipo de comunicaciones afirmaba básicamente que el hecho de usar cifrado no asegura de forma total las comunicaciones (no olvidemos nunca que la seguridad 100% no existe).


La NSA podría en efecto haber logrado varios sistemas de cifrado, pero desde luego, no todos. Sin embargo la inversión de esta agencia a la hora de romper todo tipo de códigos es inmensa.


Uno de los documentos filtrados por Edward Snowden señalaba que el presupuesto para este propósito ascendía a 10.000 millones de dólares, y como señalaban en The Intercept, tanto la NSA como el FBI son capaces de superar el cifrado a través del hacking.


Así pues, no solo está el problema de que nuestras comunicaciones cifradas estén en peligro: también existe el riesgo de que los propios gobiernos de nuestros países -o de países extranjeros- podrían estar hackeando nuestros ordenadores y smartphones, algo que haría que de hecho el cifrado no sirviese de demasiado. Según esta teoría, que Rogers defienda o no el cifrado daría lo mismo, pero aún así sus declaraciones siguen dejándonos con la duda.


Fuente | Xataka

domingo, 3 de enero de 2016

SSLv3 ya esta oficialmente caducado

Ataques como POODLE y BEAST pusieron en entredicho la seguridad de SSL. A principios de año, los principales fabricantes (Microsoft, Google y Mozilla) bloquearon SSL por defecto en sus navegadores y surgieron iniciativas como disablessl3.com para ayudar a los administradores a desactivarlo. 



Todo ello ha acelerado que el IETF (Internet Engineering Task Force) declare definitivamente obsoleto a SSL v3. El documento de norma RFC7568 publicado este mes asevera SSLV3 como "no suficientemente seguro" y prohíbe volver a usarlo en nuevas aplicaciones:

"SSLv3 NO DEBE ser utilizado", dice el documento. "La negociación de SSLv3 desde cualquier versión de TLS no debe permitirse. Cualquier versión de TLS es más segura que SSLv3, aunque la versión más alta disponible es preferible". 

RFC http://www.rfc-editor.org/rfc/rfc7568.txt