\documentclass[12pt,a4paper]{article}
\usepackage[spanish]{babel}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{subcaption}

\title{Tema XI Ejercicio III: Cifrado De Una Unidad En Linux}
\author{Nicolás A. Ortega Froysa}

\begin{document}
\maketitle
\pagebreak
\tableofcontents
\pagebreak

\section{Introducción}

El cifrado de dispositivos en GNU/Linux se puede hacer de varias maneras. Es
posible hacerlo a nivel de formato de sistema de archivos, que es un sistema
bastante común con sistemas como ZFS. Quizá lo más popular ahora mismo es usar
el sistema de LUKS. Esto permite formatear una partición de un dispositivo de
forma que esté cifrado, y sobre esta partición cifrada se puede tratar como si
fuese un dispositivo virtual.

\section{Cifrado con LUKS}

\noindent
Para este documento vamos a asumir que el dispositivo que queremos cifrar se
encuentra en {\tt /dev/sdX}. Todas las operaciones se deben de hacer como {\em
root}. {\bf Por favor, asegúrese de usar el nombre real de
tu dispositivo.}

\subsection{Creación del Dispositivo Cifrado}

Antes de crear el dispositivo cifrado, es necesario hacer una copia de los datos
que se encuentran ya en él. Asegúrese de esto antes de continuar, y de desmontar
el dispositivo.

A continuación vamos a reescribir todos los bloques de nuestro dispositivo a
cero usando el comando {\tt dd}. De este modo no será posible recuperar ningún
dato que se encontraba antes en él. Esto lo hacemos corriendo el comando
siguiente:

\begin{verbatim}
$ dd if=/dev/zero of=/dev/sdX bs=1M
\end{verbatim}

Este proceso puede tardar mucho tiempo dependiendo del tamaño del dispositivo.
Para más seguridad, es también aconsejable usar en vez de {\tt /dev/zero} el
archivo {\tt /dev/urandom}, ya que éste en vez de reescribir con ceros,
reescribirá con caracteres aleatorios.

Posteriormente ya podemos cifrar el dispositivo en sí. Primero tenemos que crear
la partición que vamos a cifrar. Como el dispositivo entero lo hemos borrado,
vamos a crear una partición que ocupe todo el disco. Esto se hace usando el
comando {\tt fdisk}:

\begin{verbatim}
$ fdisk /dev/sdX
\end{verbatim}

Esto nos abrirá la consola de {\tt fdisk}, donde introducimos los siguientes
comandos:

\begin{enumerate}
	\item {\tt n} para crear una partición nueva
	\item {\tt p} para designarla como partición primaria
	\item {\tt 1} como número de partición (sale por defecto)
	\item {\tt Enter} para usar el sector primero que sale por defecto
	\item {\tt Enter} para usar el sector final que sale por defecto
	\item {\tt w} para guardar los cambios
\end{enumerate}

Finalmente, ciframos el disco usando el comando {\tt cryptsetup}. Esto se hace
corriendo el comando siguiente:

\begin{verbatim}
$ cryptsetup luksFormat /dev/sdX
\end{verbatim}

Este comando nos hará varias preguntas. En primer lugar nos preguntará si
estamos seguros de hacer este procedimiento, ya que se perderán datos de manera
irrecuperable. Como ya hemos hecho la copia, tenemos que meter {\tt YES} (en
mayúsculas). Después, nos pedirá introducir la contraseña que queremos usar, y
verificar ésta. Cuando ya se introduce, tardará un rato en cifrar el
dispositivo.

\begin{figure}[!htb]
	\centering
	\includegraphics[width=0.75\linewidth]{imgs/cryptsetup.png}
	\caption{Uso de {\tt cryptsetup} en un archivo.}
	\label{fig:cryptsetup}
\end{figure}

Ya se ha creado el dispositivo cifrado, pero aún tenemos que abrirlo y
formatearlo para poder usarlo.

\subsection{Abrir el Dispositivo Cifrado y Formatear}

Abrir el dispositivo es también un proceso fácil: tan sólo hay que abrirlo
especificando el nombre que quiere para el dispositivo virtual (en nuestro caso,
{\tt crypt-dev}).

\begin{verbatim}
$ cryptsetup luksOpen /dev/sdX crypt-dev
\end{verbatim}

Ya se debería de encontrar nuestro dispositivo virtual en {\tt
/dev/mapper/crypt-dev}. Con esto se puede tratar como con cualquier otro
dispositivo. En nuestro caso, vamos a formatearlo con formato EXT4 de forma
siguiente:

\begin{verbatim}
$ mkfs.ext4 /dev/mapper/crypt-dev
\end{verbatim}

Ahora ya sí que podemos acceder a {\tt crypt-dev} como si fuese un dispositivo
cualquiera. Cuando queremos cerrarlo para que no se pueda acceder, simplemente
corremos el comando siguiente {\bf después de haber desmontado el dispositivo
virtual}:

\begin{verbatim}
$ cryptsetup luksClose crypt-dev
\end{verbatim}

\section{Conclusión}

El cifrado con LUKS en GNU/Linux es bastante fácil. Facilita usar el dispositivo
como un dispositivo normal virtual, y también permite cifrar una partición,
dejando a otra sin cifrar. La verdad es que ya he tenido experiencia usando esta
herramienta.\footnote{https://themusicinnoise.net/blog/2017-02-20-parabola-with-lvm-on-luks.html}
\footnote{https://themusicinnoise.net/blog/2017-02-21-encrypted-backup-drive.html}

\pagebreak

\section{Derechos de Autor y Licencia}

\noindent
Copyright \copyright\ \the\year\ Nicolás A. Ortega Froysa
<nicolas@ortegas.org> \\
\\
Este documento se distribuye bajo los términos y condiciones de la licencia
Creative Commons Attribution No Derivatives 4.0 International.

\end{document}
