<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://openssl.cicei.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Editor1</id>
	<title>HowTo OpenSSL - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://openssl.cicei.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Editor1"/>
	<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=Especial:Contribuciones/Editor1"/>
	<updated>2026-04-05T18:13:16Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=26</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=26"/>
		<updated>2025-02-26T19:28:11Z</updated>

		<summary type="html">&lt;p&gt;Editor1: /* Secretos DH como generadores de claves simétricas - Generadores de &amp;quot;carraca&amp;quot; (ratchet) y Forward Secrecy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones de resumen o funciones &amp;quot;hash&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones de resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que aceptan cualquier entrada y producen una salida consistente en una ristra de bits de tamaño fijo, que representa un &amp;quot;resumen&amp;quot; de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (mezcla fuerte, dificultad de encontrar colisiones, etc.) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran las opciones más habituales de este comando, que debe ser consultado en la documentación de OpenSSL (https://www.openssl.org/docs/man1.1.1/man1/dgst.html)&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre de la función de resumen utilizada.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -keyform arg&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de la clave (pública o privada) en &amp;quot;arg&amp;quot;, que será PEM (por defecto), DER, P12, ó ENGINE.&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. El resultado será: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;key&amp;quot; como clave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades (se considera &amp;quot;roto&amp;quot; actualmente), se debe conocer como funciona, ya que existe multitud de documentos que han usado este algoritmo a lo largo de los años.&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;En un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto.txt)= 4fa02d78a06b3833c190b464261d8c08&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como ejemplo de cómo varía un resumen ante mínimos cambios en el fichero de entrada, usaremos ahora un fichero &amp;quot;texto2.txt&amp;quot; idéntico, salvo la primera letra en minúsculas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;en un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto2.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto2.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto2.txt)= 5ed88c107e07da73dcfa03893bb8e822&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se observa que es absolutamente diferente del resumen anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
En este caso, demostraremos que cualquier función de resumen produce un &amp;quot;hash&amp;quot; de salida, aunque la entrada sea nula:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  echo &amp;quot;&amp;quot;| openssl dgst -md5 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(stdin)= 68b329da9893e34099c7d8ad5cb9c940&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de resumen que admite cualquier entrada y produce un resultado de 160 bits (20 bytes), que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática (ver la web http://shattered.io) evidenciando así la necesidad de sustituir el empleo de SHA-1 por funciones hash más robustas, como la familia SHA-2 que veremos en el apartado siguiente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA-1 del mismo fichero &amp;quot;texto.txt&amp;quot;, usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es una familia de funciones hash criptográficas, con diversos tamaños de salida en bits (SHA2-224, SHA2-256, SHA2-384 y SHA2-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 224 bits (28 bytes) que generalmente se representan como un número hexadecimal de 56 dígitos de longitud. En las versiones actuales de OpenSSL se acostumbra a nombrar las funciones de la familia SHA-2 indicando directamente el tamaño después de la palabra SHA, es decir, SHA2-224 se nombra como &amp;quot;sha-224&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-224 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 256 bits (32 bytes) que generalmente se representan como un número hexadecimal de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-256 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 384 bits (48 bytes) que generalmente se representan como un número hexadecimal de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 512 bits (64 bytes) que generalmente se representan como un número hexadecimal de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-512 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
La familia de funciones SHA-3 es el último miembro de la familia de estándares de Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto de los algoritmos SHA-2 si se descubre alguna vulnerabilidad en estos. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA-3 genera las mismas longitudes de resumen que SHA-2 (SHA3-224, SHA3-256, SHA3-384 y SHA3-512). En este caso usaremos como ejemplos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave privada o de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector de inicialización, en su caso).&lt;br /&gt;
&lt;br /&gt;
MUY IMPORTANTE: Cuando se cifra con contraseña, OpenSSL pasa esta contraseña, junto con 64 bits aleatorios de sal criptográfica, por un algoritmo de derivación de claves como el PBKDF1 (obsoleto) o el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;). Estos algoritmos utilizan funciones de resumen de forma recursiva para obtener suficientes bits para la clave de cifrado y para el vector de inicialización si es necesario. Esto permite que para una misma contraseña, se generen diferentes claves, al variar en cada caso la sal obtenida aleatoriamente. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos hemos expuesto comandos donde la contraseña aparece explícita y eso es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos. En situaciones de uso real, siempre hemos de intentar que la contraseña sea solicitada por el comando e introducida de forma no visible en pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password'' (aunque desaconsejamos esto)&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra y muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introducirá también el vector de inicialización (-iv IV) salvo que el algoritmo no lo use.&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave (recordemos que PKBDF1 está obsoleto).&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se manipulen ficheros cifrados, hay que saber cuál de las dos versiones se ha usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen ficheros antiguos cifrados con este sistema de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el &amp;quot;craqueo&amp;quot; de contraseñas por fuerza bruta sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits, que es la que utiliza OpenSSL.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha2 . El algoritmo predeterminado es sha2-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operación.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. El &amp;quot;padding&amp;quot; estándar en OpenSSL se describe en la especificación PKCS5. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y usualmente es tan largo como el tamaño de bloque (cifradores en bloque) o como el tamaño de la clave (cifradores en flujo). Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación de algoritmos de cifrado en bloque para cifrado en bloque====&lt;br /&gt;
&lt;br /&gt;
Los modos de operación más comunes son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque. Este problema se puede observar gráficamente si se cifra una imagen en colores sólidos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de algoritmos de cifrado en bloque para cifrado en flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo, ya que el cifrador de bloque se emplea para generar un &amp;quot;keystream&amp;quot; que será combinado con el texto claro bit a bit para producir el texto cifrado. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque con modo de operación de bloque===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más segura, como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este ejemplo cifraremos el fichero de ejemplo texto.txt con DES en modo ECB (recordemos lo peligroso que es este modo de operación ECB y NO LO USEMOS NUNCA EN LA VIDA REAL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 ya que utilizamos la opción &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación CBC, mucho más seguro que el ECB del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña &amp;quot;luna77&amp;quot; en la misma línea de comando (opción no recomendada):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WGQFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt) con dos claves DES. Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - CBC =====&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos un ejemplo de utilización del algoritmo des-ede-cbc para ilustrar el empleo de contraseñas y cómo se introduce automáticamente la sal en el fichero cifrado cuando se emplean contraseñas para el cifrado con cualquier tipo de algoritmo de cifrado y/o modo de operación.&lt;br /&gt;
&lt;br /&gt;
La sal 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica en el texto cifrado por un encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
En este ejemplo, cifraremos con una contraseña y luego usaremos la clave y el IV para el descifrado, eliminando los primeros 16 bytes del fichero cifrado antes de descifrarlo.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre en pantalla la sal, la clave y el vector de inicialización (opción -p):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-cbc -p -in texto.txt -out des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal, el fichero cifrado es binario (no se usó la opción -a) pero los primero ocho caracteres serán textuales, ya que es la cadena &amp;quot;Salted__&amp;quot; que indica que los ocho bits siguientes contienen la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para poder descifrar el fichero con la clave y el IV, primero hemos de &amp;quot;extraer&amp;quot; el texto &amp;quot;Salted__&amp;quot; y los ocho bits de sal (16 bytes en total) como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cbc_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Para verificar que se ha extraido correctamente la sal, se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cbc.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
Para descifrar, se hará uso de la clave y el IV obtenidos por pantalla en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cbc -d -in des_ede3_cbc_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== AES - 128 - CBC =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más utilizados es el RC4 (ya obsoleto), reemplazado en la actualidad por algoritmos más eficientes como el Chacha20 y los modos de operación en flujo (OFB o CFB) de los cifradores de bloque como TDES, AES, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo (nativos)===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se utilizó en algunos de los protocolos más populares como Secure Sockets Layer (SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) para añadir seguridad en las redes inalámbricas. En los últimos años, RC4 se ha excluido de los estándares de alta seguridad por sus debilidades. No está recomendado su uso en los nuevos sistemas y el estándar TLS de cifrado web y los protocolos WPA de cifrado en Wifi lo excluyen.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo RC4. Se tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2 &lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, ejecutamos el siguiente comando y posteriormente introducimos la misma contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' con Chacha20 usando esta vez la funcion ''-pass pass:password'' (desaconsejada).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque en modo de operación de flujo===&lt;br /&gt;
&lt;br /&gt;
Como ya hemos indicado, los modos de operación CFB, OFB y CTR transforman cifradores de bloque en cifradores de flujo, veamos un ejemplo con Triple DES y otro con AES&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior, aunque insistimos en que es mejor no poner esta opción y teclear la contraseña directamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
===== AES - 192 - CFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 192 bits para cifrar con modo CFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se va a cifrar el ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave es mayor (48 caracteres hexadecimales), mientras que el vector de inicialización se mantiene constante en los 32 caracteres hexadecimales (128 bits) del tamaño de bloque, que es el mismo para los tres tamaños de clave de AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para descifrar se haría de la misma manera que en el paso 1, colocando la opción &amp;quot;-d&amp;quot; y permutando los valores de las opciones &amp;quot;-in&amp;quot; y &amp;quot;-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== AES - 256 - CTR =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 256 bits para cifrar con modo CTR, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Cifraremos el fichero ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la opción &amp;quot;-pbkdf2&amp;quot; para emplear la derivación de clave más potente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ctr -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ctr.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_256_ctr.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, podemos ejecutar el siguiente comando (que no tiene la opción -pass file:passwd.txt) y posteriormente introducimos la contraseña contenida en dicho fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ctr -d -a -pbkdf2 -in aes_256_ctr.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ctr decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
Como sabemos, el cifrado asimétrico sólo se puede aplicar a &amp;quot;cosas pequeñas&amp;quot; como claves simétricas o resúmenes. Cualquier intento de cifrar con RSA un fichero normal, de más de 200 caracteres, producirá un error de tipo &amp;quot;input too long&amp;quot;. El envío confidencial de ficheros normales exige el empleo de sistemas mixtos, en los que el fichero se cifra con una clave simétrica (o contraseña) y esa contraseña es cifrada mediante RSA con la clave pública del receptor y así es enviada a dicho receptor, junto con el fichero cifrado. Si además se desea verificar la integridad del envío, se añade un resumen firmado (que a su vez es un cifrado con clave privada del emisor) del fichero original.&lt;br /&gt;
&lt;br /&gt;
Por tanto, desarrollamos un ejemplo en el que el emisor (Alice) envia a Bob el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.aes), el resumen SHA-256 del fichero original, cifrado con su propia clave RSA privada (firmaDoc.rsa) y la contraseña que usó para cifrar el documento, cifrada a su vez con la clave pública RSA de Bob (contraseña.cif). Antes de nada, emisor (Alice) y receptor (Bob) tendrán que haber intercambiado sus claves públicas (publicaAliceRSA.pem y publicaBobRSA.pem) y por supuesto, cada uno conserva su clave privada (privadaAliceRSA.pem y privadaBobRSA.pem).&lt;br /&gt;
&lt;br /&gt;
;Tarea de Alice (emisor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1: Alice cifra con clave simétrica (AES-256-CBC) el fichero &amp;quot;texto.txt&amp;quot; con una contraseña &amp;quot;prueba+12&amp;quot; y produce &amp;quot;texto.aes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2: Alice escribe la contraseña en el fichero &amp;quot;contraseña.txt&amp;quot;, veamos el contenido este fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3: Alice cifra de forma asimétrica el fichero contraseña.txt con la clave pública RSA de Bob (fichero publicaBobRSA.pem) y produce &amp;quot;contraseña.cif&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaBobRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; Paso 4 : Alice firma con su clave privada RSA (privadaAliceRSA.pem) el resumen generado con SHA2-256 del fichero texto.txt y genera el fichero &amp;quot;firmaDoc.rsa&amp;quot;. Lo más normal es que la clave privada de Alice esté cifrada y se le solicite la contraseña al ejecutar este comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadaAliceRSA.pem -out firmaDoc.rsa texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, Alice envía a Bob los tres ficheros: texto.aes, contraseña.cif y firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
; Tarea de Bob (receptor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
Bob recibe el mensaje con los tres ficheros de Alice y procede a descifrar la contraseña enviada por Alice (contraseña.cif) con su clave privada (privadaBob.pem) en el fichero contraseña.txt. Si la clave privada de Bob estuviese cifrada (que es lo más normal), se le solicitará la contraseña que la protege.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoBobRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida contraseña.txt, Bob ya conoce la contraseña que Alice usó para cifrar texto.aes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
Una vez obtenida la contraseña de cifrado simétrica &amp;quot;prueba +12&amp;quot;, Bob puede descifrar el &amp;quot;texto.aes&amp;quot; con dicha contraseña y obtener el documento original (texto.txt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.aes -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
Bob verifica que el resumen SHA-256 del texto descifrado (texto.txt) coincide con el resumen firmado en firmaDoc.rsa. Como Alice firmó el resumen (es decir, lo cifró mediante RSA con su propia clave privada), Bob usa la clave pública de Alice (publicaAliceRSA.pem) para descifrarlo. Si la comprobación es correcta, la transmisión ha tenido CONFIDENCIALIDAD (el texto viajó cifrado con una clave simétrica que viajaba cifrada con RSA) y además INTEGRIDAD (el texto descifrado coincide con el que calculó Alice y envió firmado, es decir, cifrado con su clave privada RSA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaAliceRSA.pem -signature firmaDoc.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: Sabemos que OpenSSL ofrece alternativas para casi todos los comandos. Bob podría realizar este último paso generando el resumen SHA256 del fichero texto.txt en un fichero texto.sha y utilizando el comando &amp;quot;openssl pkeyutl&amp;quot; de la misma forma que se indica en el paso 3 del ejemplo siguiente, con los cambios oportunos.&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del resumen de un fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en formato binario en el fichero de salida &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.sha texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.sha&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.sha -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.sha -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando la curva Curve25519. Como los restantes métodos Diffie-Hellman, permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro o que intercambien sus claves públicas, de forma que la combinación pública-privada en cada extremo produce el mismo valor (secreto) que será utilizado para generar la clave de cifrado simétrico compartida. Esta curva en particular es utilizada por los conocidos sistemas de mensajería móvil Signal y Whatsapp.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada, que contiene la clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Secretos DH y EC como generadores de claves simétricas - Generadores de &amp;quot;carraca&amp;quot; (ratchet) y Forward Secrecy ====&lt;br /&gt;
&lt;br /&gt;
Obsérvese que el &amp;quot;secreto&amp;quot; que se ha negociado con las dos parejas de claves DH es un valor binario de 256 caracteres (2048 bits), mientras que el secreto derivado de las claves X25519 tiene tan sólo 32 caracteres binarios (256 bits), ya que las claves EC (de curva elíptica) son de menor tamaño que las originales DH y por tanto, los números que resultan de las operaciones de derivación son de tamaño similar a las claves utilizadas. &lt;br /&gt;
&lt;br /&gt;
Habitualmente, este secreto será empleado como generador de clave (y vector de inicialización, en su caso) del algoritmo de cifrado simétrico escogido entre ambas partes. Es común, sobre todo empleando curvas elípticas, que se necesiten más bits para la clave de cifrado simétrico (y vector) que el tamaño del propio secreto obtenido, pero esto no es problema, ya que el secreto no se usa directamente como valor de la clave. Lo que se hace es calcular un resumen determinado (sha-256, sha-512, etc.) del secreto y generar a partir de este resumen, directamente o por iteración de la función (realimentando la salida en la entrada tantas veces como se necesite) los bits necesarios para rellenar la clave (y el vector). &lt;br /&gt;
&lt;br /&gt;
Una variante de este proceso bastante común en la actualidad es el empleo del secreto como &amp;quot;generador de carraca&amp;quot; o &amp;quot;ratchet function&amp;quot;. En este caso, lo que se introduce en la función de resumen es la concatenación del secreto y un contador, lo que permitirá cambiar la clave (y el vector) en cada transmisión (identificada por su número en el contador siempre creciente), tal y como se hace en los mensajes de la conocida aplicación Whatsapp. Este tipo de generación de claves en secuencia garantiza la propiedad conocida como &amp;quot;Forward Secrecy&amp;quot;, ya que el descifrado de cada mensaje requerirá el mismo esfuerzo para el atacante, dado que si no conoce el valor del secreto negociado, no podrá deducir la secuencia de claves que se aplica en cada mensaje.&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obsérvese que no se ha incorporado en el comando de verificación el certificado del firmante (emisor del correo), ya que habitualmente los agentes de correo como Thunderbird incorporan como adjunto el certificado del firmante (emisor) en todos los mensajes firmados, como opción por defecto. De no ser así, el comando informaría de error en la verificación por falta de un certificado y sería necesario incorporar el certificado del firmante, con la opción &amp;quot;-certfile CertEmisor.pem&amp;quot; o similar.&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados X.509 ==&lt;br /&gt;
&lt;br /&gt;
Un certificado X.509 autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=25</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=25"/>
		<updated>2025-02-26T19:02:21Z</updated>

		<summary type="html">&lt;p&gt;Editor1: /* Derivación de claves DH */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones de resumen o funciones &amp;quot;hash&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones de resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que aceptan cualquier entrada y producen una salida consistente en una ristra de bits de tamaño fijo, que representa un &amp;quot;resumen&amp;quot; de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (mezcla fuerte, dificultad de encontrar colisiones, etc.) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran las opciones más habituales de este comando, que debe ser consultado en la documentación de OpenSSL (https://www.openssl.org/docs/man1.1.1/man1/dgst.html)&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre de la función de resumen utilizada.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -keyform arg&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de la clave (pública o privada) en &amp;quot;arg&amp;quot;, que será PEM (por defecto), DER, P12, ó ENGINE.&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. El resultado será: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;key&amp;quot; como clave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades (se considera &amp;quot;roto&amp;quot; actualmente), se debe conocer como funciona, ya que existe multitud de documentos que han usado este algoritmo a lo largo de los años.&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;En un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto.txt)= 4fa02d78a06b3833c190b464261d8c08&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como ejemplo de cómo varía un resumen ante mínimos cambios en el fichero de entrada, usaremos ahora un fichero &amp;quot;texto2.txt&amp;quot; idéntico, salvo la primera letra en minúsculas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;en un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto2.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto2.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto2.txt)= 5ed88c107e07da73dcfa03893bb8e822&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se observa que es absolutamente diferente del resumen anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
En este caso, demostraremos que cualquier función de resumen produce un &amp;quot;hash&amp;quot; de salida, aunque la entrada sea nula:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  echo &amp;quot;&amp;quot;| openssl dgst -md5 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(stdin)= 68b329da9893e34099c7d8ad5cb9c940&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de resumen que admite cualquier entrada y produce un resultado de 160 bits (20 bytes), que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática (ver la web http://shattered.io) evidenciando así la necesidad de sustituir el empleo de SHA-1 por funciones hash más robustas, como la familia SHA-2 que veremos en el apartado siguiente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA-1 del mismo fichero &amp;quot;texto.txt&amp;quot;, usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es una familia de funciones hash criptográficas, con diversos tamaños de salida en bits (SHA2-224, SHA2-256, SHA2-384 y SHA2-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 224 bits (28 bytes) que generalmente se representan como un número hexadecimal de 56 dígitos de longitud. En las versiones actuales de OpenSSL se acostumbra a nombrar las funciones de la familia SHA-2 indicando directamente el tamaño después de la palabra SHA, es decir, SHA2-224 se nombra como &amp;quot;sha-224&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-224 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 256 bits (32 bytes) que generalmente se representan como un número hexadecimal de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-256 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 384 bits (48 bytes) que generalmente se representan como un número hexadecimal de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 512 bits (64 bytes) que generalmente se representan como un número hexadecimal de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-512 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
La familia de funciones SHA-3 es el último miembro de la familia de estándares de Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto de los algoritmos SHA-2 si se descubre alguna vulnerabilidad en estos. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA-3 genera las mismas longitudes de resumen que SHA-2 (SHA3-224, SHA3-256, SHA3-384 y SHA3-512). En este caso usaremos como ejemplos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave privada o de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector de inicialización, en su caso).&lt;br /&gt;
&lt;br /&gt;
MUY IMPORTANTE: Cuando se cifra con contraseña, OpenSSL pasa esta contraseña, junto con 64 bits aleatorios de sal criptográfica, por un algoritmo de derivación de claves como el PBKDF1 (obsoleto) o el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;). Estos algoritmos utilizan funciones de resumen de forma recursiva para obtener suficientes bits para la clave de cifrado y para el vector de inicialización si es necesario. Esto permite que para una misma contraseña, se generen diferentes claves, al variar en cada caso la sal obtenida aleatoriamente. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos hemos expuesto comandos donde la contraseña aparece explícita y eso es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos. En situaciones de uso real, siempre hemos de intentar que la contraseña sea solicitada por el comando e introducida de forma no visible en pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password'' (aunque desaconsejamos esto)&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra y muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introducirá también el vector de inicialización (-iv IV) salvo que el algoritmo no lo use.&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave (recordemos que PKBDF1 está obsoleto).&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se manipulen ficheros cifrados, hay que saber cuál de las dos versiones se ha usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen ficheros antiguos cifrados con este sistema de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el &amp;quot;craqueo&amp;quot; de contraseñas por fuerza bruta sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits, que es la que utiliza OpenSSL.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha2 . El algoritmo predeterminado es sha2-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operación.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. El &amp;quot;padding&amp;quot; estándar en OpenSSL se describe en la especificación PKCS5. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y usualmente es tan largo como el tamaño de bloque (cifradores en bloque) o como el tamaño de la clave (cifradores en flujo). Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación de algoritmos de cifrado en bloque para cifrado en bloque====&lt;br /&gt;
&lt;br /&gt;
Los modos de operación más comunes son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque. Este problema se puede observar gráficamente si se cifra una imagen en colores sólidos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de algoritmos de cifrado en bloque para cifrado en flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo, ya que el cifrador de bloque se emplea para generar un &amp;quot;keystream&amp;quot; que será combinado con el texto claro bit a bit para producir el texto cifrado. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque con modo de operación de bloque===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más segura, como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este ejemplo cifraremos el fichero de ejemplo texto.txt con DES en modo ECB (recordemos lo peligroso que es este modo de operación ECB y NO LO USEMOS NUNCA EN LA VIDA REAL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 ya que utilizamos la opción &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación CBC, mucho más seguro que el ECB del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña &amp;quot;luna77&amp;quot; en la misma línea de comando (opción no recomendada):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WGQFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt) con dos claves DES. Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - CBC =====&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos un ejemplo de utilización del algoritmo des-ede-cbc para ilustrar el empleo de contraseñas y cómo se introduce automáticamente la sal en el fichero cifrado cuando se emplean contraseñas para el cifrado con cualquier tipo de algoritmo de cifrado y/o modo de operación.&lt;br /&gt;
&lt;br /&gt;
La sal 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica en el texto cifrado por un encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
En este ejemplo, cifraremos con una contraseña y luego usaremos la clave y el IV para el descifrado, eliminando los primeros 16 bytes del fichero cifrado antes de descifrarlo.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre en pantalla la sal, la clave y el vector de inicialización (opción -p):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-cbc -p -in texto.txt -out des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal, el fichero cifrado es binario (no se usó la opción -a) pero los primero ocho caracteres serán textuales, ya que es la cadena &amp;quot;Salted__&amp;quot; que indica que los ocho bits siguientes contienen la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para poder descifrar el fichero con la clave y el IV, primero hemos de &amp;quot;extraer&amp;quot; el texto &amp;quot;Salted__&amp;quot; y los ocho bits de sal (16 bytes en total) como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cbc_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Para verificar que se ha extraido correctamente la sal, se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cbc.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
Para descifrar, se hará uso de la clave y el IV obtenidos por pantalla en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cbc -d -in des_ede3_cbc_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== AES - 128 - CBC =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más utilizados es el RC4 (ya obsoleto), reemplazado en la actualidad por algoritmos más eficientes como el Chacha20 y los modos de operación en flujo (OFB o CFB) de los cifradores de bloque como TDES, AES, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo (nativos)===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se utilizó en algunos de los protocolos más populares como Secure Sockets Layer (SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) para añadir seguridad en las redes inalámbricas. En los últimos años, RC4 se ha excluido de los estándares de alta seguridad por sus debilidades. No está recomendado su uso en los nuevos sistemas y el estándar TLS de cifrado web y los protocolos WPA de cifrado en Wifi lo excluyen.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo RC4. Se tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2 &lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, ejecutamos el siguiente comando y posteriormente introducimos la misma contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' con Chacha20 usando esta vez la funcion ''-pass pass:password'' (desaconsejada).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque en modo de operación de flujo===&lt;br /&gt;
&lt;br /&gt;
Como ya hemos indicado, los modos de operación CFB, OFB y CTR transforman cifradores de bloque en cifradores de flujo, veamos un ejemplo con Triple DES y otro con AES&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior, aunque insistimos en que es mejor no poner esta opción y teclear la contraseña directamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
===== AES - 192 - CFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 192 bits para cifrar con modo CFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se va a cifrar el ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave es mayor (48 caracteres hexadecimales), mientras que el vector de inicialización se mantiene constante en los 32 caracteres hexadecimales (128 bits) del tamaño de bloque, que es el mismo para los tres tamaños de clave de AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para descifrar se haría de la misma manera que en el paso 1, colocando la opción &amp;quot;-d&amp;quot; y permutando los valores de las opciones &amp;quot;-in&amp;quot; y &amp;quot;-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== AES - 256 - CTR =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 256 bits para cifrar con modo CTR, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Cifraremos el fichero ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la opción &amp;quot;-pbkdf2&amp;quot; para emplear la derivación de clave más potente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ctr -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ctr.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_256_ctr.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, podemos ejecutar el siguiente comando (que no tiene la opción -pass file:passwd.txt) y posteriormente introducimos la contraseña contenida en dicho fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ctr -d -a -pbkdf2 -in aes_256_ctr.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ctr decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
Como sabemos, el cifrado asimétrico sólo se puede aplicar a &amp;quot;cosas pequeñas&amp;quot; como claves simétricas o resúmenes. Cualquier intento de cifrar con RSA un fichero normal, de más de 200 caracteres, producirá un error de tipo &amp;quot;input too long&amp;quot;. El envío confidencial de ficheros normales exige el empleo de sistemas mixtos, en los que el fichero se cifra con una clave simétrica (o contraseña) y esa contraseña es cifrada mediante RSA con la clave pública del receptor y así es enviada a dicho receptor, junto con el fichero cifrado. Si además se desea verificar la integridad del envío, se añade un resumen firmado (que a su vez es un cifrado con clave privada del emisor) del fichero original.&lt;br /&gt;
&lt;br /&gt;
Por tanto, desarrollamos un ejemplo en el que el emisor (Alice) envia a Bob el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.aes), el resumen SHA-256 del fichero original, cifrado con su propia clave RSA privada (firmaDoc.rsa) y la contraseña que usó para cifrar el documento, cifrada a su vez con la clave pública RSA de Bob (contraseña.cif). Antes de nada, emisor (Alice) y receptor (Bob) tendrán que haber intercambiado sus claves públicas (publicaAliceRSA.pem y publicaBobRSA.pem) y por supuesto, cada uno conserva su clave privada (privadaAliceRSA.pem y privadaBobRSA.pem).&lt;br /&gt;
&lt;br /&gt;
;Tarea de Alice (emisor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1: Alice cifra con clave simétrica (AES-256-CBC) el fichero &amp;quot;texto.txt&amp;quot; con una contraseña &amp;quot;prueba+12&amp;quot; y produce &amp;quot;texto.aes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2: Alice escribe la contraseña en el fichero &amp;quot;contraseña.txt&amp;quot;, veamos el contenido este fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3: Alice cifra de forma asimétrica el fichero contraseña.txt con la clave pública RSA de Bob (fichero publicaBobRSA.pem) y produce &amp;quot;contraseña.cif&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaBobRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; Paso 4 : Alice firma con su clave privada RSA (privadaAliceRSA.pem) el resumen generado con SHA2-256 del fichero texto.txt y genera el fichero &amp;quot;firmaDoc.rsa&amp;quot;. Lo más normal es que la clave privada de Alice esté cifrada y se le solicite la contraseña al ejecutar este comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadaAliceRSA.pem -out firmaDoc.rsa texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, Alice envía a Bob los tres ficheros: texto.aes, contraseña.cif y firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
; Tarea de Bob (receptor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
Bob recibe el mensaje con los tres ficheros de Alice y procede a descifrar la contraseña enviada por Alice (contraseña.cif) con su clave privada (privadaBob.pem) en el fichero contraseña.txt. Si la clave privada de Bob estuviese cifrada (que es lo más normal), se le solicitará la contraseña que la protege.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoBobRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida contraseña.txt, Bob ya conoce la contraseña que Alice usó para cifrar texto.aes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
Una vez obtenida la contraseña de cifrado simétrica &amp;quot;prueba +12&amp;quot;, Bob puede descifrar el &amp;quot;texto.aes&amp;quot; con dicha contraseña y obtener el documento original (texto.txt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.aes -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
Bob verifica que el resumen SHA-256 del texto descifrado (texto.txt) coincide con el resumen firmado en firmaDoc.rsa. Como Alice firmó el resumen (es decir, lo cifró mediante RSA con su propia clave privada), Bob usa la clave pública de Alice (publicaAliceRSA.pem) para descifrarlo. Si la comprobación es correcta, la transmisión ha tenido CONFIDENCIALIDAD (el texto viajó cifrado con una clave simétrica que viajaba cifrada con RSA) y además INTEGRIDAD (el texto descifrado coincide con el que calculó Alice y envió firmado, es decir, cifrado con su clave privada RSA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaAliceRSA.pem -signature firmaDoc.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: Sabemos que OpenSSL ofrece alternativas para casi todos los comandos. Bob podría realizar este último paso generando el resumen SHA256 del fichero texto.txt en un fichero texto.sha y utilizando el comando &amp;quot;openssl pkeyutl&amp;quot; de la misma forma que se indica en el paso 3 del ejemplo siguiente, con los cambios oportunos.&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del resumen de un fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en formato binario en el fichero de salida &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.sha texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.sha&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.sha -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.sha -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando la curva Curve25519. Como los restantes métodos Diffie-Hellman, permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro o que intercambien sus claves públicas, de forma que la combinación pública-privada en cada extremo produce el mismo valor (secreto) que será utilizado para generar la clave de cifrado simétrico compartida. Esta curva en particular es utilizada por los conocidos sistemas de mensajería móvil Signal y Whatsapp.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada, que contiene la clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Secretos DH como generadores de claves simétricas - Generadores de &amp;quot;carraca&amp;quot; (ratchet) y Forward Secrecy ====&lt;br /&gt;
&lt;br /&gt;
Obsérvese que en este caso, el &amp;quot;secreto&amp;quot; que se ha negociado con las dos parejas de claves DH es un valor binario de 32 caracteres (256 bits). Habitualmente, este secreto será empleado como generador de clave (y vector de inicialización, en su caso) del algoritmo de cifrado simétrico escogido entre ambas partes. Es habitual que se necesiten más bits para dicha clave (y vector) que el tamaño del propio secreto obtenido. Lo que se hace es calcular un resumen determinado (sha-256, sha-512, etc.) del secreto y obtener, directamente o por iteración de la función (realimentando la salida en la entrada tantas veces como se necesite) los bits necesarios para rellenar la clave (y el vector). Más habitual aún es el empleo del secreto como &amp;quot;generador de carraca&amp;quot; o &amp;quot;ratchet function&amp;quot;. En este caso, lo que se introduce en la función de resumen es la concatenación del secreto y un contador, lo que permitirá cambiar la clave (y el vector) en cada transmisión (identificada por su número en el contador siempre creciente), como se hace en los mensajes de Whatsapp, lo que garantiza la propiedad conocida como &amp;quot;Forward Secrecy&amp;quot;, ya que el descifrado de cada mensaje requerirá el mismo esfuerzo para el atacante, dado que si no conoce el valor del secreto negociado, no podrá deducir la secuencia de claves que se aplica en cada mensaje.&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obsérvese que no se ha incorporado en el comando de verificación el certificado del firmante (emisor del correo), ya que habitualmente los agentes de correo como Thunderbird incorporan como adjunto el certificado del firmante (emisor) en todos los mensajes firmados, como opción por defecto. De no ser así, el comando informaría de error en la verificación por falta de un certificado y sería necesario incorporar el certificado del firmante, con la opción &amp;quot;-certfile CertEmisor.pem&amp;quot; o similar.&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados X.509 ==&lt;br /&gt;
&lt;br /&gt;
Un certificado X.509 autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=24</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=24"/>
		<updated>2025-02-26T18:58:10Z</updated>

		<summary type="html">&lt;p&gt;Editor1: /* X25519 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones de resumen o funciones &amp;quot;hash&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones de resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que aceptan cualquier entrada y producen una salida consistente en una ristra de bits de tamaño fijo, que representa un &amp;quot;resumen&amp;quot; de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (mezcla fuerte, dificultad de encontrar colisiones, etc.) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran las opciones más habituales de este comando, que debe ser consultado en la documentación de OpenSSL (https://www.openssl.org/docs/man1.1.1/man1/dgst.html)&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre de la función de resumen utilizada.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -keyform arg&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de la clave (pública o privada) en &amp;quot;arg&amp;quot;, que será PEM (por defecto), DER, P12, ó ENGINE.&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. El resultado será: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;key&amp;quot; como clave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades (se considera &amp;quot;roto&amp;quot; actualmente), se debe conocer como funciona, ya que existe multitud de documentos que han usado este algoritmo a lo largo de los años.&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;En un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto.txt)= 4fa02d78a06b3833c190b464261d8c08&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como ejemplo de cómo varía un resumen ante mínimos cambios en el fichero de entrada, usaremos ahora un fichero &amp;quot;texto2.txt&amp;quot; idéntico, salvo la primera letra en minúsculas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;en un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto2.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto2.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto2.txt)= 5ed88c107e07da73dcfa03893bb8e822&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se observa que es absolutamente diferente del resumen anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
En este caso, demostraremos que cualquier función de resumen produce un &amp;quot;hash&amp;quot; de salida, aunque la entrada sea nula:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  echo &amp;quot;&amp;quot;| openssl dgst -md5 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(stdin)= 68b329da9893e34099c7d8ad5cb9c940&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de resumen que admite cualquier entrada y produce un resultado de 160 bits (20 bytes), que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática (ver la web http://shattered.io) evidenciando así la necesidad de sustituir el empleo de SHA-1 por funciones hash más robustas, como la familia SHA-2 que veremos en el apartado siguiente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA-1 del mismo fichero &amp;quot;texto.txt&amp;quot;, usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es una familia de funciones hash criptográficas, con diversos tamaños de salida en bits (SHA2-224, SHA2-256, SHA2-384 y SHA2-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 224 bits (28 bytes) que generalmente se representan como un número hexadecimal de 56 dígitos de longitud. En las versiones actuales de OpenSSL se acostumbra a nombrar las funciones de la familia SHA-2 indicando directamente el tamaño después de la palabra SHA, es decir, SHA2-224 se nombra como &amp;quot;sha-224&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-224 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 256 bits (32 bytes) que generalmente se representan como un número hexadecimal de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-256 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 384 bits (48 bytes) que generalmente se representan como un número hexadecimal de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 512 bits (64 bytes) que generalmente se representan como un número hexadecimal de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-512 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
La familia de funciones SHA-3 es el último miembro de la familia de estándares de Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto de los algoritmos SHA-2 si se descubre alguna vulnerabilidad en estos. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA-3 genera las mismas longitudes de resumen que SHA-2 (SHA3-224, SHA3-256, SHA3-384 y SHA3-512). En este caso usaremos como ejemplos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave privada o de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector de inicialización, en su caso).&lt;br /&gt;
&lt;br /&gt;
MUY IMPORTANTE: Cuando se cifra con contraseña, OpenSSL pasa esta contraseña, junto con 64 bits aleatorios de sal criptográfica, por un algoritmo de derivación de claves como el PBKDF1 (obsoleto) o el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;). Estos algoritmos utilizan funciones de resumen de forma recursiva para obtener suficientes bits para la clave de cifrado y para el vector de inicialización si es necesario. Esto permite que para una misma contraseña, se generen diferentes claves, al variar en cada caso la sal obtenida aleatoriamente. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos hemos expuesto comandos donde la contraseña aparece explícita y eso es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos. En situaciones de uso real, siempre hemos de intentar que la contraseña sea solicitada por el comando e introducida de forma no visible en pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password'' (aunque desaconsejamos esto)&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra y muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introducirá también el vector de inicialización (-iv IV) salvo que el algoritmo no lo use.&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave (recordemos que PKBDF1 está obsoleto).&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se manipulen ficheros cifrados, hay que saber cuál de las dos versiones se ha usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen ficheros antiguos cifrados con este sistema de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el &amp;quot;craqueo&amp;quot; de contraseñas por fuerza bruta sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits, que es la que utiliza OpenSSL.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha2 . El algoritmo predeterminado es sha2-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operación.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. El &amp;quot;padding&amp;quot; estándar en OpenSSL se describe en la especificación PKCS5. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y usualmente es tan largo como el tamaño de bloque (cifradores en bloque) o como el tamaño de la clave (cifradores en flujo). Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación de algoritmos de cifrado en bloque para cifrado en bloque====&lt;br /&gt;
&lt;br /&gt;
Los modos de operación más comunes son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque. Este problema se puede observar gráficamente si se cifra una imagen en colores sólidos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de algoritmos de cifrado en bloque para cifrado en flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo, ya que el cifrador de bloque se emplea para generar un &amp;quot;keystream&amp;quot; que será combinado con el texto claro bit a bit para producir el texto cifrado. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque con modo de operación de bloque===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más segura, como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este ejemplo cifraremos el fichero de ejemplo texto.txt con DES en modo ECB (recordemos lo peligroso que es este modo de operación ECB y NO LO USEMOS NUNCA EN LA VIDA REAL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 ya que utilizamos la opción &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación CBC, mucho más seguro que el ECB del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña &amp;quot;luna77&amp;quot; en la misma línea de comando (opción no recomendada):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WGQFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt) con dos claves DES. Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - CBC =====&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos un ejemplo de utilización del algoritmo des-ede-cbc para ilustrar el empleo de contraseñas y cómo se introduce automáticamente la sal en el fichero cifrado cuando se emplean contraseñas para el cifrado con cualquier tipo de algoritmo de cifrado y/o modo de operación.&lt;br /&gt;
&lt;br /&gt;
La sal 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica en el texto cifrado por un encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
En este ejemplo, cifraremos con una contraseña y luego usaremos la clave y el IV para el descifrado, eliminando los primeros 16 bytes del fichero cifrado antes de descifrarlo.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre en pantalla la sal, la clave y el vector de inicialización (opción -p):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-cbc -p -in texto.txt -out des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal, el fichero cifrado es binario (no se usó la opción -a) pero los primero ocho caracteres serán textuales, ya que es la cadena &amp;quot;Salted__&amp;quot; que indica que los ocho bits siguientes contienen la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para poder descifrar el fichero con la clave y el IV, primero hemos de &amp;quot;extraer&amp;quot; el texto &amp;quot;Salted__&amp;quot; y los ocho bits de sal (16 bytes en total) como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cbc_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Para verificar que se ha extraido correctamente la sal, se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cbc.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
Para descifrar, se hará uso de la clave y el IV obtenidos por pantalla en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cbc -d -in des_ede3_cbc_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== AES - 128 - CBC =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más utilizados es el RC4 (ya obsoleto), reemplazado en la actualidad por algoritmos más eficientes como el Chacha20 y los modos de operación en flujo (OFB o CFB) de los cifradores de bloque como TDES, AES, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo (nativos)===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se utilizó en algunos de los protocolos más populares como Secure Sockets Layer (SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) para añadir seguridad en las redes inalámbricas. En los últimos años, RC4 se ha excluido de los estándares de alta seguridad por sus debilidades. No está recomendado su uso en los nuevos sistemas y el estándar TLS de cifrado web y los protocolos WPA de cifrado en Wifi lo excluyen.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo RC4. Se tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2 &lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, ejecutamos el siguiente comando y posteriormente introducimos la misma contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' con Chacha20 usando esta vez la funcion ''-pass pass:password'' (desaconsejada).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque en modo de operación de flujo===&lt;br /&gt;
&lt;br /&gt;
Como ya hemos indicado, los modos de operación CFB, OFB y CTR transforman cifradores de bloque en cifradores de flujo, veamos un ejemplo con Triple DES y otro con AES&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior, aunque insistimos en que es mejor no poner esta opción y teclear la contraseña directamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
===== AES - 192 - CFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 192 bits para cifrar con modo CFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se va a cifrar el ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave es mayor (48 caracteres hexadecimales), mientras que el vector de inicialización se mantiene constante en los 32 caracteres hexadecimales (128 bits) del tamaño de bloque, que es el mismo para los tres tamaños de clave de AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para descifrar se haría de la misma manera que en el paso 1, colocando la opción &amp;quot;-d&amp;quot; y permutando los valores de las opciones &amp;quot;-in&amp;quot; y &amp;quot;-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== AES - 256 - CTR =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 256 bits para cifrar con modo CTR, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Cifraremos el fichero ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la opción &amp;quot;-pbkdf2&amp;quot; para emplear la derivación de clave más potente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ctr -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ctr.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_256_ctr.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, podemos ejecutar el siguiente comando (que no tiene la opción -pass file:passwd.txt) y posteriormente introducimos la contraseña contenida en dicho fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ctr -d -a -pbkdf2 -in aes_256_ctr.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ctr decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
Como sabemos, el cifrado asimétrico sólo se puede aplicar a &amp;quot;cosas pequeñas&amp;quot; como claves simétricas o resúmenes. Cualquier intento de cifrar con RSA un fichero normal, de más de 200 caracteres, producirá un error de tipo &amp;quot;input too long&amp;quot;. El envío confidencial de ficheros normales exige el empleo de sistemas mixtos, en los que el fichero se cifra con una clave simétrica (o contraseña) y esa contraseña es cifrada mediante RSA con la clave pública del receptor y así es enviada a dicho receptor, junto con el fichero cifrado. Si además se desea verificar la integridad del envío, se añade un resumen firmado (que a su vez es un cifrado con clave privada del emisor) del fichero original.&lt;br /&gt;
&lt;br /&gt;
Por tanto, desarrollamos un ejemplo en el que el emisor (Alice) envia a Bob el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.aes), el resumen SHA-256 del fichero original, cifrado con su propia clave RSA privada (firmaDoc.rsa) y la contraseña que usó para cifrar el documento, cifrada a su vez con la clave pública RSA de Bob (contraseña.cif). Antes de nada, emisor (Alice) y receptor (Bob) tendrán que haber intercambiado sus claves públicas (publicaAliceRSA.pem y publicaBobRSA.pem) y por supuesto, cada uno conserva su clave privada (privadaAliceRSA.pem y privadaBobRSA.pem).&lt;br /&gt;
&lt;br /&gt;
;Tarea de Alice (emisor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1: Alice cifra con clave simétrica (AES-256-CBC) el fichero &amp;quot;texto.txt&amp;quot; con una contraseña &amp;quot;prueba+12&amp;quot; y produce &amp;quot;texto.aes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2: Alice escribe la contraseña en el fichero &amp;quot;contraseña.txt&amp;quot;, veamos el contenido este fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3: Alice cifra de forma asimétrica el fichero contraseña.txt con la clave pública RSA de Bob (fichero publicaBobRSA.pem) y produce &amp;quot;contraseña.cif&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaBobRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; Paso 4 : Alice firma con su clave privada RSA (privadaAliceRSA.pem) el resumen generado con SHA2-256 del fichero texto.txt y genera el fichero &amp;quot;firmaDoc.rsa&amp;quot;. Lo más normal es que la clave privada de Alice esté cifrada y se le solicite la contraseña al ejecutar este comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadaAliceRSA.pem -out firmaDoc.rsa texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, Alice envía a Bob los tres ficheros: texto.aes, contraseña.cif y firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
; Tarea de Bob (receptor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
Bob recibe el mensaje con los tres ficheros de Alice y procede a descifrar la contraseña enviada por Alice (contraseña.cif) con su clave privada (privadaBob.pem) en el fichero contraseña.txt. Si la clave privada de Bob estuviese cifrada (que es lo más normal), se le solicitará la contraseña que la protege.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoBobRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida contraseña.txt, Bob ya conoce la contraseña que Alice usó para cifrar texto.aes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
Una vez obtenida la contraseña de cifrado simétrica &amp;quot;prueba +12&amp;quot;, Bob puede descifrar el &amp;quot;texto.aes&amp;quot; con dicha contraseña y obtener el documento original (texto.txt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.aes -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
Bob verifica que el resumen SHA-256 del texto descifrado (texto.txt) coincide con el resumen firmado en firmaDoc.rsa. Como Alice firmó el resumen (es decir, lo cifró mediante RSA con su propia clave privada), Bob usa la clave pública de Alice (publicaAliceRSA.pem) para descifrarlo. Si la comprobación es correcta, la transmisión ha tenido CONFIDENCIALIDAD (el texto viajó cifrado con una clave simétrica que viajaba cifrada con RSA) y además INTEGRIDAD (el texto descifrado coincide con el que calculó Alice y envió firmado, es decir, cifrado con su clave privada RSA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaAliceRSA.pem -signature firmaDoc.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: Sabemos que OpenSSL ofrece alternativas para casi todos los comandos. Bob podría realizar este último paso generando el resumen SHA256 del fichero texto.txt en un fichero texto.sha y utilizando el comando &amp;quot;openssl pkeyutl&amp;quot; de la misma forma que se indica en el paso 3 del ejemplo siguiente, con los cambios oportunos.&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del resumen de un fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en formato binario en el fichero de salida &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.sha texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.sha&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.sha -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.sha -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando la curva Curve25519. Como los restantes métodos Diffie-Hellman, permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro o que intercambien sus claves públicas, de forma que la combinación pública-privada en cada extremo produce el mismo valor (secreto) que será utilizado para generar la clave de cifrado simétrico compartida. Esta curva en particular es utilizada por los conocidos sistemas de mensajería móvil Signal y Whatsapp.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada, que contiene la clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Conclusión: Secretos DH como generadores de claves simétricas - Generadores de &amp;quot;carraca&amp;quot; (ratchet) y Forward Secrecy&lt;br /&gt;
&lt;br /&gt;
Obsérvese que en este caso, el &amp;quot;secreto&amp;quot; que se ha negociado con las dos parejas de claves DH es un valor binario de 32 caracteres (256 bits). Habitualmente, este secreto será empleado como generador de clave (y vector de inicialización, en su caso) del algoritmo de cifrado simétrico escogido entre ambas partes. Es habitual que se necesiten más bits para dicha clave (y vector) que el tamaño del propio secreto obtenido. Lo que se hace es calcular un resumen determinado (sha-256, sha-512, etc.) del secreto y obtener, directamente o por iteración de la función (realimentando la salida en la entrada tantas veces como se necesite) los bits necesarios para rellenar la clave (y el vector). Más habitual aún es el empleo del secreto como &amp;quot;generador de carraca&amp;quot; o &amp;quot;ratchet function&amp;quot;. En este caso, lo que se introduce en la función de resumen es la concatenación del secreto y un contador, lo que permitirá cambiar la clave (y el vector) en cada transmisión (identificada por su número en el contador siempre creciente), como se hace en los mensajes de Whatsapp, lo que garantiza la propiedad conocida como &amp;quot;Forward Secrecy&amp;quot;, ya que el descifrado de cada mensaje requerirá el mismo esfuerzo para el atacante, dado que si no conoce el valor del secreto negociado, no podrá deducir la secuencia de claves que se aplica en cada mensaje.&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obsérvese que no se ha incorporado en el comando de verificación el certificado del firmante (emisor del correo), ya que habitualmente los agentes de correo como Thunderbird incorporan como adjunto el certificado del firmante (emisor) en todos los mensajes firmados, como opción por defecto. De no ser así, el comando informaría de error en la verificación por falta de un certificado y sería necesario incorporar el certificado del firmante, con la opción &amp;quot;-certfile CertEmisor.pem&amp;quot; o similar.&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados X.509 ==&lt;br /&gt;
&lt;br /&gt;
Un certificado X.509 autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=23</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=23"/>
		<updated>2025-02-26T14:26:36Z</updated>

		<summary type="html">&lt;p&gt;Editor1: /* AES - 256 - CTR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones de resumen o funciones &amp;quot;hash&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones de resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que aceptan cualquier entrada y producen una salida consistente en una ristra de bits de tamaño fijo, que representa un &amp;quot;resumen&amp;quot; de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (mezcla fuerte, dificultad de encontrar colisiones, etc.) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran las opciones más habituales de este comando, que debe ser consultado en la documentación de OpenSSL (https://www.openssl.org/docs/man1.1.1/man1/dgst.html)&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre de la función de resumen utilizada.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -keyform arg&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de la clave (pública o privada) en &amp;quot;arg&amp;quot;, que será PEM (por defecto), DER, P12, ó ENGINE.&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. El resultado será: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;key&amp;quot; como clave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades (se considera &amp;quot;roto&amp;quot; actualmente), se debe conocer como funciona, ya que existe multitud de documentos que han usado este algoritmo a lo largo de los años.&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;En un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto.txt)= 4fa02d78a06b3833c190b464261d8c08&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como ejemplo de cómo varía un resumen ante mínimos cambios en el fichero de entrada, usaremos ahora un fichero &amp;quot;texto2.txt&amp;quot; idéntico, salvo la primera letra en minúsculas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;en un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto2.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto2.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto2.txt)= 5ed88c107e07da73dcfa03893bb8e822&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se observa que es absolutamente diferente del resumen anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
En este caso, demostraremos que cualquier función de resumen produce un &amp;quot;hash&amp;quot; de salida, aunque la entrada sea nula:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  echo &amp;quot;&amp;quot;| openssl dgst -md5 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(stdin)= 68b329da9893e34099c7d8ad5cb9c940&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de resumen que admite cualquier entrada y produce un resultado de 160 bits (20 bytes), que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática (ver la web http://shattered.io) evidenciando así la necesidad de sustituir el empleo de SHA-1 por funciones hash más robustas, como la familia SHA-2 que veremos en el apartado siguiente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA-1 del mismo fichero &amp;quot;texto.txt&amp;quot;, usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es una familia de funciones hash criptográficas, con diversos tamaños de salida en bits (SHA2-224, SHA2-256, SHA2-384 y SHA2-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 224 bits (28 bytes) que generalmente se representan como un número hexadecimal de 56 dígitos de longitud. En las versiones actuales de OpenSSL se acostumbra a nombrar las funciones de la familia SHA-2 indicando directamente el tamaño después de la palabra SHA, es decir, SHA2-224 se nombra como &amp;quot;sha-224&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-224 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 256 bits (32 bytes) que generalmente se representan como un número hexadecimal de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-256 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 384 bits (48 bytes) que generalmente se representan como un número hexadecimal de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 512 bits (64 bytes) que generalmente se representan como un número hexadecimal de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-512 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
La familia de funciones SHA-3 es el último miembro de la familia de estándares de Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto de los algoritmos SHA-2 si se descubre alguna vulnerabilidad en estos. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA-3 genera las mismas longitudes de resumen que SHA-2 (SHA3-224, SHA3-256, SHA3-384 y SHA3-512). En este caso usaremos como ejemplos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave privada o de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector de inicialización, en su caso).&lt;br /&gt;
&lt;br /&gt;
MUY IMPORTANTE: Cuando se cifra con contraseña, OpenSSL pasa esta contraseña, junto con 64 bits aleatorios de sal criptográfica, por un algoritmo de derivación de claves como el PBKDF1 (obsoleto) o el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;). Estos algoritmos utilizan funciones de resumen de forma recursiva para obtener suficientes bits para la clave de cifrado y para el vector de inicialización si es necesario. Esto permite que para una misma contraseña, se generen diferentes claves, al variar en cada caso la sal obtenida aleatoriamente. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos hemos expuesto comandos donde la contraseña aparece explícita y eso es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos. En situaciones de uso real, siempre hemos de intentar que la contraseña sea solicitada por el comando e introducida de forma no visible en pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password'' (aunque desaconsejamos esto)&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra y muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introducirá también el vector de inicialización (-iv IV) salvo que el algoritmo no lo use.&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave (recordemos que PKBDF1 está obsoleto).&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se manipulen ficheros cifrados, hay que saber cuál de las dos versiones se ha usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen ficheros antiguos cifrados con este sistema de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el &amp;quot;craqueo&amp;quot; de contraseñas por fuerza bruta sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits, que es la que utiliza OpenSSL.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha2 . El algoritmo predeterminado es sha2-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operación.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. El &amp;quot;padding&amp;quot; estándar en OpenSSL se describe en la especificación PKCS5. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y usualmente es tan largo como el tamaño de bloque (cifradores en bloque) o como el tamaño de la clave (cifradores en flujo). Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación de algoritmos de cifrado en bloque para cifrado en bloque====&lt;br /&gt;
&lt;br /&gt;
Los modos de operación más comunes son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque. Este problema se puede observar gráficamente si se cifra una imagen en colores sólidos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de algoritmos de cifrado en bloque para cifrado en flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo, ya que el cifrador de bloque se emplea para generar un &amp;quot;keystream&amp;quot; que será combinado con el texto claro bit a bit para producir el texto cifrado. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque con modo de operación de bloque===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más segura, como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este ejemplo cifraremos el fichero de ejemplo texto.txt con DES en modo ECB (recordemos lo peligroso que es este modo de operación ECB y NO LO USEMOS NUNCA EN LA VIDA REAL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 ya que utilizamos la opción &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación CBC, mucho más seguro que el ECB del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña &amp;quot;luna77&amp;quot; en la misma línea de comando (opción no recomendada):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WGQFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt) con dos claves DES. Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - CBC =====&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos un ejemplo de utilización del algoritmo des-ede-cbc para ilustrar el empleo de contraseñas y cómo se introduce automáticamente la sal en el fichero cifrado cuando se emplean contraseñas para el cifrado con cualquier tipo de algoritmo de cifrado y/o modo de operación.&lt;br /&gt;
&lt;br /&gt;
La sal 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica en el texto cifrado por un encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
En este ejemplo, cifraremos con una contraseña y luego usaremos la clave y el IV para el descifrado, eliminando los primeros 16 bytes del fichero cifrado antes de descifrarlo.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre en pantalla la sal, la clave y el vector de inicialización (opción -p):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-cbc -p -in texto.txt -out des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal, el fichero cifrado es binario (no se usó la opción -a) pero los primero ocho caracteres serán textuales, ya que es la cadena &amp;quot;Salted__&amp;quot; que indica que los ocho bits siguientes contienen la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para poder descifrar el fichero con la clave y el IV, primero hemos de &amp;quot;extraer&amp;quot; el texto &amp;quot;Salted__&amp;quot; y los ocho bits de sal (16 bytes en total) como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cbc_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Para verificar que se ha extraido correctamente la sal, se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cbc.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
Para descifrar, se hará uso de la clave y el IV obtenidos por pantalla en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cbc -d -in des_ede3_cbc_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== AES - 128 - CBC =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más utilizados es el RC4 (ya obsoleto), reemplazado en la actualidad por algoritmos más eficientes como el Chacha20 y los modos de operación en flujo (OFB o CFB) de los cifradores de bloque como TDES, AES, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo (nativos)===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se utilizó en algunos de los protocolos más populares como Secure Sockets Layer (SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) para añadir seguridad en las redes inalámbricas. En los últimos años, RC4 se ha excluido de los estándares de alta seguridad por sus debilidades. No está recomendado su uso en los nuevos sistemas y el estándar TLS de cifrado web y los protocolos WPA de cifrado en Wifi lo excluyen.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo RC4. Se tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2 &lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, ejecutamos el siguiente comando y posteriormente introducimos la misma contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' con Chacha20 usando esta vez la funcion ''-pass pass:password'' (desaconsejada).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque en modo de operación de flujo===&lt;br /&gt;
&lt;br /&gt;
Como ya hemos indicado, los modos de operación CFB, OFB y CTR transforman cifradores de bloque en cifradores de flujo, veamos un ejemplo con Triple DES y otro con AES&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior, aunque insistimos en que es mejor no poner esta opción y teclear la contraseña directamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
===== AES - 192 - CFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 192 bits para cifrar con modo CFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se va a cifrar el ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave es mayor (48 caracteres hexadecimales), mientras que el vector de inicialización se mantiene constante en los 32 caracteres hexadecimales (128 bits) del tamaño de bloque, que es el mismo para los tres tamaños de clave de AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para descifrar se haría de la misma manera que en el paso 1, colocando la opción &amp;quot;-d&amp;quot; y permutando los valores de las opciones &amp;quot;-in&amp;quot; y &amp;quot;-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== AES - 256 - CTR =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 256 bits para cifrar con modo CTR, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Cifraremos el fichero ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la opción &amp;quot;-pbkdf2&amp;quot; para emplear la derivación de clave más potente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ctr -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ctr.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_256_ctr.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, podemos ejecutar el siguiente comando (que no tiene la opción -pass file:passwd.txt) y posteriormente introducimos la contraseña contenida en dicho fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ctr -d -a -pbkdf2 -in aes_256_ctr.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ctr decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
Como sabemos, el cifrado asimétrico sólo se puede aplicar a &amp;quot;cosas pequeñas&amp;quot; como claves simétricas o resúmenes. Cualquier intento de cifrar con RSA un fichero normal, de más de 200 caracteres, producirá un error de tipo &amp;quot;input too long&amp;quot;. El envío confidencial de ficheros normales exige el empleo de sistemas mixtos, en los que el fichero se cifra con una clave simétrica (o contraseña) y esa contraseña es cifrada mediante RSA con la clave pública del receptor y así es enviada a dicho receptor, junto con el fichero cifrado. Si además se desea verificar la integridad del envío, se añade un resumen firmado (que a su vez es un cifrado con clave privada del emisor) del fichero original.&lt;br /&gt;
&lt;br /&gt;
Por tanto, desarrollamos un ejemplo en el que el emisor (Alice) envia a Bob el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.aes), el resumen SHA-256 del fichero original, cifrado con su propia clave RSA privada (firmaDoc.rsa) y la contraseña que usó para cifrar el documento, cifrada a su vez con la clave pública RSA de Bob (contraseña.cif). Antes de nada, emisor (Alice) y receptor (Bob) tendrán que haber intercambiado sus claves públicas (publicaAliceRSA.pem y publicaBobRSA.pem) y por supuesto, cada uno conserva su clave privada (privadaAliceRSA.pem y privadaBobRSA.pem).&lt;br /&gt;
&lt;br /&gt;
;Tarea de Alice (emisor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1: Alice cifra con clave simétrica (AES-256-CBC) el fichero &amp;quot;texto.txt&amp;quot; con una contraseña &amp;quot;prueba+12&amp;quot; y produce &amp;quot;texto.aes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2: Alice escribe la contraseña en el fichero &amp;quot;contraseña.txt&amp;quot;, veamos el contenido este fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3: Alice cifra de forma asimétrica el fichero contraseña.txt con la clave pública RSA de Bob (fichero publicaBobRSA.pem) y produce &amp;quot;contraseña.cif&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaBobRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; Paso 4 : Alice firma con su clave privada RSA (privadaAliceRSA.pem) el resumen generado con SHA2-256 del fichero texto.txt y genera el fichero &amp;quot;firmaDoc.rsa&amp;quot;. Lo más normal es que la clave privada de Alice esté cifrada y se le solicite la contraseña al ejecutar este comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadaAliceRSA.pem -out firmaDoc.rsa texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, Alice envía a Bob los tres ficheros: texto.aes, contraseña.cif y firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
; Tarea de Bob (receptor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
Bob recibe el mensaje con los tres ficheros de Alice y procede a descifrar la contraseña enviada por Alice (contraseña.cif) con su clave privada (privadaBob.pem) en el fichero contraseña.txt. Si la clave privada de Bob estuviese cifrada (que es lo más normal), se le solicitará la contraseña que la protege.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoBobRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida contraseña.txt, Bob ya conoce la contraseña que Alice usó para cifrar texto.aes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
Una vez obtenida la contraseña de cifrado simétrica &amp;quot;prueba +12&amp;quot;, Bob puede descifrar el &amp;quot;texto.aes&amp;quot; con dicha contraseña y obtener el documento original (texto.txt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.aes -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
Bob verifica que el resumen SHA-256 del texto descifrado (texto.txt) coincide con el resumen firmado en firmaDoc.rsa. Como Alice firmó el resumen (es decir, lo cifró mediante RSA con su propia clave privada), Bob usa la clave pública de Alice (publicaAliceRSA.pem) para descifrarlo. Si la comprobación es correcta, la transmisión ha tenido CONFIDENCIALIDAD (el texto viajó cifrado con una clave simétrica que viajaba cifrada con RSA) y además INTEGRIDAD (el texto descifrado coincide con el que calculó Alice y envió firmado, es decir, cifrado con su clave privada RSA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaAliceRSA.pem -signature firmaDoc.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: Sabemos que OpenSSL ofrece alternativas para casi todos los comandos. Bob podría realizar este último paso generando el resumen SHA256 del fichero texto.txt en un fichero texto.sha y utilizando el comando &amp;quot;openssl pkeyutl&amp;quot; de la misma forma que se indica en el paso 3 del ejemplo siguiente, con los cambios oportunos.&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del resumen de un fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en formato binario en el fichero de salida &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.sha texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.sha&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.sha -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.sha -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando la curva Curve25519. Como los restantes métodos Diffie-Hellman, permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro o que intercambien sus claves públicas, de forma que la combinación pública-privada en cada extremo produce el mismo valor (secreto) que será utilizado para generar la clave de cifrado simétrico compartida. Esta curva en particular es utilizada por los conocidos sistemas de mensajería móvil Signal y Whatsapp.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada, que contiene la clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obsérvese que no se ha incorporado en el comando de verificación el certificado del firmante (emisor del correo), ya que habitualmente los agentes de correo como Thunderbird incorporan como adjunto el certificado del firmante (emisor) en todos los mensajes firmados, como opción por defecto. De no ser así, el comando informaría de error en la verificación por falta de un certificado y sería necesario incorporar el certificado del firmante, con la opción &amp;quot;-certfile CertEmisor.pem&amp;quot; o similar.&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados X.509 ==&lt;br /&gt;
&lt;br /&gt;
Un certificado X.509 autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=22</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=22"/>
		<updated>2025-02-26T14:04:34Z</updated>

		<summary type="html">&lt;p&gt;Editor1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones de resumen o funciones &amp;quot;hash&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones de resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que aceptan cualquier entrada y producen una salida consistente en una ristra de bits de tamaño fijo, que representa un &amp;quot;resumen&amp;quot; de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (mezcla fuerte, dificultad de encontrar colisiones, etc.) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran las opciones más habituales de este comando, que debe ser consultado en la documentación de OpenSSL (https://www.openssl.org/docs/man1.1.1/man1/dgst.html)&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre de la función de resumen utilizada.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -keyform arg&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de la clave (pública o privada) en &amp;quot;arg&amp;quot;, que será PEM (por defecto), DER, P12, ó ENGINE.&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. El resultado será: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;key&amp;quot; como clave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades (se considera &amp;quot;roto&amp;quot; actualmente), se debe conocer como funciona, ya que existe multitud de documentos que han usado este algoritmo a lo largo de los años.&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;En un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto.txt)= 4fa02d78a06b3833c190b464261d8c08&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como ejemplo de cómo varía un resumen ante mínimos cambios en el fichero de entrada, usaremos ahora un fichero &amp;quot;texto2.txt&amp;quot; idéntico, salvo la primera letra en minúsculas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;en un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto2.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto2.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto2.txt)= 5ed88c107e07da73dcfa03893bb8e822&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se observa que es absolutamente diferente del resumen anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
En este caso, demostraremos que cualquier función de resumen produce un &amp;quot;hash&amp;quot; de salida, aunque la entrada sea nula:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  echo &amp;quot;&amp;quot;| openssl dgst -md5 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(stdin)= 68b329da9893e34099c7d8ad5cb9c940&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de resumen que admite cualquier entrada y produce un resultado de 160 bits (20 bytes), que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática (ver la web http://shattered.io) evidenciando así la necesidad de sustituir el empleo de SHA-1 por funciones hash más robustas, como la familia SHA-2 que veremos en el apartado siguiente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA-1 del mismo fichero &amp;quot;texto.txt&amp;quot;, usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es una familia de funciones hash criptográficas, con diversos tamaños de salida en bits (SHA2-224, SHA2-256, SHA2-384 y SHA2-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 224 bits (28 bytes) que generalmente se representan como un número hexadecimal de 56 dígitos de longitud. En las versiones actuales de OpenSSL se acostumbra a nombrar las funciones de la familia SHA-2 indicando directamente el tamaño después de la palabra SHA, es decir, SHA2-224 se nombra como &amp;quot;sha-224&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-224 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 256 bits (32 bytes) que generalmente se representan como un número hexadecimal de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-256 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 384 bits (48 bytes) que generalmente se representan como un número hexadecimal de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 512 bits (64 bytes) que generalmente se representan como un número hexadecimal de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-512 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
La familia de funciones SHA-3 es el último miembro de la familia de estándares de Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto de los algoritmos SHA-2 si se descubre alguna vulnerabilidad en estos. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA-3 genera las mismas longitudes de resumen que SHA-2 (SHA3-224, SHA3-256, SHA3-384 y SHA3-512). En este caso usaremos como ejemplos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave privada o de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector de inicialización, en su caso).&lt;br /&gt;
&lt;br /&gt;
MUY IMPORTANTE: Cuando se cifra con contraseña, OpenSSL pasa esta contraseña, junto con 64 bits aleatorios de sal criptográfica, por un algoritmo de derivación de claves como el PBKDF1 (obsoleto) o el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;). Estos algoritmos utilizan funciones de resumen de forma recursiva para obtener suficientes bits para la clave de cifrado y para el vector de inicialización si es necesario. Esto permite que para una misma contraseña, se generen diferentes claves, al variar en cada caso la sal obtenida aleatoriamente. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos hemos expuesto comandos donde la contraseña aparece explícita y eso es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos. En situaciones de uso real, siempre hemos de intentar que la contraseña sea solicitada por el comando e introducida de forma no visible en pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password'' (aunque desaconsejamos esto)&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra y muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introducirá también el vector de inicialización (-iv IV) salvo que el algoritmo no lo use.&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave (recordemos que PKBDF1 está obsoleto).&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se manipulen ficheros cifrados, hay que saber cuál de las dos versiones se ha usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen ficheros antiguos cifrados con este sistema de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el &amp;quot;craqueo&amp;quot; de contraseñas por fuerza bruta sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits, que es la que utiliza OpenSSL.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha2 . El algoritmo predeterminado es sha2-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operación.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. El &amp;quot;padding&amp;quot; estándar en OpenSSL se describe en la especificación PKCS5. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y usualmente es tan largo como el tamaño de bloque (cifradores en bloque) o como el tamaño de la clave (cifradores en flujo). Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación de algoritmos de cifrado en bloque para cifrado en bloque====&lt;br /&gt;
&lt;br /&gt;
Los modos de operación más comunes son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque. Este problema se puede observar gráficamente si se cifra una imagen en colores sólidos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de algoritmos de cifrado en bloque para cifrado en flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo, ya que el cifrador de bloque se emplea para generar un &amp;quot;keystream&amp;quot; que será combinado con el texto claro bit a bit para producir el texto cifrado. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque con modo de operación de bloque===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más segura, como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este ejemplo cifraremos el fichero de ejemplo texto.txt con DES en modo ECB (recordemos lo peligroso que es este modo de operación ECB y NO LO USEMOS NUNCA EN LA VIDA REAL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 ya que utilizamos la opción &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación CBC, mucho más seguro que el ECB del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña &amp;quot;luna77&amp;quot; en la misma línea de comando (opción no recomendada):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WGQFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt) con dos claves DES. Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - CBC =====&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos un ejemplo de utilización del algoritmo des-ede-cbc para ilustrar el empleo de contraseñas y cómo se introduce automáticamente la sal en el fichero cifrado cuando se emplean contraseñas para el cifrado con cualquier tipo de algoritmo de cifrado y/o modo de operación.&lt;br /&gt;
&lt;br /&gt;
La sal 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica en el texto cifrado por un encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
En este ejemplo, cifraremos con una contraseña y luego usaremos la clave y el IV para el descifrado, eliminando los primeros 16 bytes del fichero cifrado antes de descifrarlo.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre en pantalla la sal, la clave y el vector de inicialización (opción -p):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-cbc -p -in texto.txt -out des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal, el fichero cifrado es binario (no se usó la opción -a) pero los primero ocho caracteres serán textuales, ya que es la cadena &amp;quot;Salted__&amp;quot; que indica que los ocho bits siguientes contienen la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para poder descifrar el fichero con la clave y el IV, primero hemos de &amp;quot;extraer&amp;quot; el texto &amp;quot;Salted__&amp;quot; y los ocho bits de sal (16 bytes en total) como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cbc_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Para verificar que se ha extraido correctamente la sal, se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cbc.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
Para descifrar, se hará uso de la clave y el IV obtenidos por pantalla en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cbc -d -in des_ede3_cbc_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== AES - 128 - CBC =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más utilizados es el RC4 (ya obsoleto), reemplazado en la actualidad por algoritmos más eficientes como el Chacha20 y los modos de operación en flujo (OFB o CFB) de los cifradores de bloque como TDES, AES, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo (nativos)===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se utilizó en algunos de los protocolos más populares como Secure Sockets Layer (SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) para añadir seguridad en las redes inalámbricas. En los últimos años, RC4 se ha excluido de los estándares de alta seguridad por sus debilidades. No está recomendado su uso en los nuevos sistemas y el estándar TLS de cifrado web y los protocolos WPA de cifrado en Wifi lo excluyen.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo RC4. Se tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2 &lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, ejecutamos el siguiente comando y posteriormente introducimos la misma contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' con Chacha20 usando esta vez la funcion ''-pass pass:password'' (desaconsejada).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque en modo de operación de flujo===&lt;br /&gt;
&lt;br /&gt;
Como ya hemos indicado, los modos de operación CFB, OFB y CTR transforman cifradores de bloque en cifradores de flujo, veamos un ejemplo con Triple DES y otro con AES&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior, aunque insistimos en que es mejor no poner esta opción y teclear la contraseña directamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
===== AES - 192 - CFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 192 bits para cifrar con modo CFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se va a cifrar el ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave es mayor (48 caracteres hexadecimales), mientras que el vector de inicialización se mantiene constante en los 32 caracteres hexadecimales (128 bits) del tamaño de bloque, que es el mismo para los tres tamaños de clave de AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para descifrar se haría de la misma manera que en el paso 1, colocando la opción &amp;quot;-d&amp;quot; y permutando los valores de las opciones &amp;quot;-in&amp;quot; y &amp;quot;-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== AES - 256 - OFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 256 bits para cifrar con modo OFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Cifraremos el fichero ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la opción &amp;quot;-pbkdf2&amp;quot; para emplear la derivación de clave más potente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, podemos ejecutar el siguiente comando (que no tiene la opción -pass file:passwd.txt) y posteriormente introducimos la contraseña contenida en dicho fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
Como sabemos, el cifrado asimétrico sólo se puede aplicar a &amp;quot;cosas pequeñas&amp;quot; como claves simétricas o resúmenes. Cualquier intento de cifrar con RSA un fichero normal, de más de 200 caracteres, producirá un error de tipo &amp;quot;input too long&amp;quot;. El envío confidencial de ficheros normales exige el empleo de sistemas mixtos, en los que el fichero se cifra con una clave simétrica (o contraseña) y esa contraseña es cifrada mediante RSA con la clave pública del receptor y así es enviada a dicho receptor, junto con el fichero cifrado. Si además se desea verificar la integridad del envío, se añade un resumen firmado (que a su vez es un cifrado con clave privada del emisor) del fichero original.&lt;br /&gt;
&lt;br /&gt;
Por tanto, desarrollamos un ejemplo en el que el emisor (Alice) envia a Bob el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.aes), el resumen SHA-256 del fichero original, cifrado con su propia clave RSA privada (firmaDoc.rsa) y la contraseña que usó para cifrar el documento, cifrada a su vez con la clave pública RSA de Bob (contraseña.cif). Antes de nada, emisor (Alice) y receptor (Bob) tendrán que haber intercambiado sus claves públicas (publicaAliceRSA.pem y publicaBobRSA.pem) y por supuesto, cada uno conserva su clave privada (privadaAliceRSA.pem y privadaBobRSA.pem).&lt;br /&gt;
&lt;br /&gt;
;Tarea de Alice (emisor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1: Alice cifra con clave simétrica (AES-256-CBC) el fichero &amp;quot;texto.txt&amp;quot; con una contraseña &amp;quot;prueba+12&amp;quot; y produce &amp;quot;texto.aes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2: Alice escribe la contraseña en el fichero &amp;quot;contraseña.txt&amp;quot;, veamos el contenido este fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3: Alice cifra de forma asimétrica el fichero contraseña.txt con la clave pública RSA de Bob (fichero publicaBobRSA.pem) y produce &amp;quot;contraseña.cif&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaBobRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; Paso 4 : Alice firma con su clave privada RSA (privadaAliceRSA.pem) el resumen generado con SHA2-256 del fichero texto.txt y genera el fichero &amp;quot;firmaDoc.rsa&amp;quot;. Lo más normal es que la clave privada de Alice esté cifrada y se le solicite la contraseña al ejecutar este comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadaAliceRSA.pem -out firmaDoc.rsa texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, Alice envía a Bob los tres ficheros: texto.aes, contraseña.cif y firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
; Tarea de Bob (receptor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
Bob recibe el mensaje con los tres ficheros de Alice y procede a descifrar la contraseña enviada por Alice (contraseña.cif) con su clave privada (privadaBob.pem) en el fichero contraseña.txt. Si la clave privada de Bob estuviese cifrada (que es lo más normal), se le solicitará la contraseña que la protege.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoBobRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida contraseña.txt, Bob ya conoce la contraseña que Alice usó para cifrar texto.aes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
Una vez obtenida la contraseña de cifrado simétrica &amp;quot;prueba +12&amp;quot;, Bob puede descifrar el &amp;quot;texto.aes&amp;quot; con dicha contraseña y obtener el documento original (texto.txt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.aes -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
Bob verifica que el resumen SHA-256 del texto descifrado (texto.txt) coincide con el resumen firmado en firmaDoc.rsa. Como Alice firmó el resumen (es decir, lo cifró mediante RSA con su propia clave privada), Bob usa la clave pública de Alice (publicaAliceRSA.pem) para descifrarlo. Si la comprobación es correcta, la transmisión ha tenido CONFIDENCIALIDAD (el texto viajó cifrado con una clave simétrica que viajaba cifrada con RSA) y además INTEGRIDAD (el texto descifrado coincide con el que calculó Alice y envió firmado, es decir, cifrado con su clave privada RSA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaAliceRSA.pem -signature firmaDoc.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: Sabemos que OpenSSL ofrece alternativas para casi todos los comandos. Bob podría realizar este último paso generando el resumen SHA256 del fichero texto.txt en un fichero texto.sha y utilizando el comando &amp;quot;openssl pkeyutl&amp;quot; de la misma forma que se indica en el paso 3 del ejemplo siguiente, con los cambios oportunos.&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del resumen de un fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en formato binario en el fichero de salida &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.sha texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.sha&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.sha -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.sha -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando la curva Curve25519. Como los restantes métodos Diffie-Hellman, permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro o que intercambien sus claves públicas, de forma que la combinación pública-privada en cada extremo produce el mismo valor (secreto) que será utilizado para generar la clave de cifrado simétrico compartida. Esta curva en particular es utilizada por los conocidos sistemas de mensajería móvil Signal y Whatsapp.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada, que contiene la clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obsérvese que no se ha incorporado en el comando de verificación el certificado del firmante (emisor del correo), ya que habitualmente los agentes de correo como Thunderbird incorporan como adjunto el certificado del firmante (emisor) en todos los mensajes firmados, como opción por defecto. De no ser así, el comando informaría de error en la verificación por falta de un certificado y sería necesario incorporar el certificado del firmante, con la opción &amp;quot;-certfile CertEmisor.pem&amp;quot; o similar.&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados X.509 ==&lt;br /&gt;
&lt;br /&gt;
Un certificado X.509 autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=21</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=21"/>
		<updated>2020-04-02T01:01:00Z</updated>

		<summary type="html">&lt;p&gt;Editor1: /* Resúmenes */ enlace a docs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones de resumen o funciones &amp;quot;hash&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones de resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que aceptan cualquier entrada y producen una salida consistente en una ristra de bits de tamaño fijo, que representa un &amp;quot;resumen&amp;quot; de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (mezcla fuerte, dificultad de encontrar colisiones, etc.) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran las opciones más habituales de este comando, que debe ser consultado en la documentación de OpenSSL (https://www.openssl.org/docs/man1.1.1/man1/dgst.html)&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre de la función de resumen utilizada.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -keyform arg&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de la clave (pública o privada) en &amp;quot;arg&amp;quot;, que será PEM (por defecto), DER, P12, ó ENGINE.&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. El resultado será: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;key&amp;quot; como clave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades (se considera &amp;quot;roto&amp;quot; actualmente), se debe conocer como funciona, ya que existe multitud de documentos que han usado este algoritmo a lo largo de los años.&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;En un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto.txt)= 4fa02d78a06b3833c190b464261d8c08&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como ejemplo de cómo varía un resumen ante mínimos cambios en el fichero de entrada, usaremos ahora un fichero &amp;quot;texto2.txt&amp;quot; idéntico, salvo la primera letra en minúsculas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;en un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto2.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto2.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto2.txt)= 5ed88c107e07da73dcfa03893bb8e822&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se observa que es absolutamente diferente del resumen anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
En este caso, demostraremos que cualquier función de resumen produce un &amp;quot;hash&amp;quot; de salida, aunque la entrada sea nula:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  echo &amp;quot;&amp;quot;| openssl dgst -md5 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(stdin)= 68b329da9893e34099c7d8ad5cb9c940&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de resumen que admite cualquier entrada y produce un resultado de 160 bits (20 bytes), que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática (ver la web http://shattered.io) evidenciando así la necesidad de sustituir el empleo de SHA-1 por funciones hash más robustas, como la familia SHA-2 que veremos en el apartado siguiente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA-1 del mismo fichero &amp;quot;texto.txt&amp;quot;, usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es una familia de funciones hash criptográficas, con diversos tamaños de salida en bits (SHA2-224, SHA2-256, SHA2-384 y SHA2-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 224 bits (28 bytes) que generalmente se representan como un número hexadecimal de 56 dígitos de longitud. En las versiones actuales de OpenSSL se acostumbra a nombrar las funciones de la familia SHA-2 indicando directamente el tamaño después de la palabra SHA, es decir, SHA2-224 se nombra como &amp;quot;sha-224&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-224 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 256 bits (32 bytes) que generalmente se representan como un número hexadecimal de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-256 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 384 bits (48 bytes) que generalmente se representan como un número hexadecimal de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 512 bits (64 bytes) que generalmente se representan como un número hexadecimal de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-512 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
La familia de funciones SHA-3 es el último miembro de la familia de estándares de Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto de los algoritmos SHA-2 si se descubre alguna vulnerabilidad en estos. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA-3 genera las mismas longitudes de resumen que SHA-2 (SHA3-224, SHA3-256, SHA3-384 y SHA3-512). En este caso usaremos como ejemplos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave privada o de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector de inicialización, en su caso).&lt;br /&gt;
&lt;br /&gt;
MUY IMPORTANTE: Cuando se cifra con contraseña, OpenSSL pasa esta contraseña, junto con 64 bits aleatorios de sal criptográfica, por un algoritmo de derivación de claves como el PBKDF1 (obsoleto) o el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;). Estos algoritmos utilizan funciones de resumen de forma recursiva para obtener suficientes bits para la clave de cifrado y para el vector de inicialización si es necesario. Esto permite que para una misma contraseña, se generen diferentes claves, al variar en cada caso la sal obtenida aleatoriamente. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos hemos expuesto comandos donde la contraseña aparece explícita y eso es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos. En situaciones de uso real, siempre hemos de intentar que la contraseña sea solicitada por el comando e introducida de forma no visible en pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password'' (aunque desaconsejamos esto)&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra y muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introducirá también el vector de inicialización (-iv IV) salvo que el algoritmo no lo use.&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave (recordemos que PKBDF1 está obsoleto).&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se manipulen ficheros cifrados, hay que saber cuál de las dos versiones se ha usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen ficheros antiguos cifrados con este sistema de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el &amp;quot;craqueo&amp;quot; de contraseñas por fuerza bruta sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits, que es la que utiliza OpenSSL.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha2 . El algoritmo predeterminado es sha2-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operación.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. El &amp;quot;padding&amp;quot; estándar en OpenSSL se describe en la especificación PKCS5. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y usualmente es tan largo como el tamaño de bloque (cifradores en bloque) o como el tamaño de la clave (cifradores en flujo). Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación de algoritmos de cifrado en bloque para cifrado en bloque====&lt;br /&gt;
&lt;br /&gt;
Los modos de operación más comunes son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque. Este problema se puede observar gráficamente si se cifra una imagen en colores sólidos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de algoritmos de cifrado en bloque para cifrado en flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo, ya que el cifrador de bloque se emplea para generar un &amp;quot;keystream&amp;quot; que será combinado con el texto claro bit a bit para producir el texto cifrado. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque con modo de operación de bloque===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más segura, como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este ejemplo cifraremos el fichero de ejemplo texto.txt con DES en modo ECB (recordemos lo peligroso que es este modo de operación ECB y NO LO USEMOS NUNCA EN LA VIDA REAL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 ya que utilizamos la opción &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación CBC, mucho más seguro que el ECB del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña &amp;quot;luna77&amp;quot; en la misma línea de comando (opción no recomendada):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WGQFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt) con dos claves DES. Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - CBC =====&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos un ejemplo de utilización del algoritmo des-ede-cbc para ilustrar el empleo de contraseñas y cómo se introduce automáticamente la sal en el fichero cifrado cuando se emplean contraseñas para el cifrado con cualquier tipo de algoritmo de cifrado y/o modo de operación.&lt;br /&gt;
&lt;br /&gt;
La sal 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica en el texto cifrado por un encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
En este ejemplo, cifraremos con una contraseña y luego usaremos la clave y el IV para el descifrado, eliminando los primeros 16 bytes del fichero cifrado antes de descifrarlo.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre en pantalla la sal, la clave y el vector de inicialización (opción -p):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-cbc -p -in texto.txt -out des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal, el fichero cifrado es binario (no se usó la opción -a) pero los primero ocho caracteres serán textuales, ya que es la cadena &amp;quot;Salted__&amp;quot; que indica que los ocho bits siguientes contienen la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para poder descifrar el fichero con la clave y el IV, primero hemos de &amp;quot;extraer&amp;quot; el texto &amp;quot;Salted__&amp;quot; y los ocho bits de sal (16 bytes en total) como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cbc_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Para verificar que se ha extraido correctamente la sal, se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cbc.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
Para descifrar, se hará uso de la clave y el IV obtenidos por pantalla en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cbc -d -in des_ede3_cbc_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== AES - 128 - CBC =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más utilizados es el RC4 (ya obsoleto), reemplazado en la actualidad por algoritmos más eficientes como el Chacha20 y los modos de operación en flujo (OFB o CFB) de los cifradores de bloque como TDES, AES, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo (nativos)===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se utilizó en algunos de los protocolos más populares como Secure Sockets Layer (SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) para añadir seguridad en las redes inalámbricas. En los últimos años, RC4 se ha excluido de los estándares de alta seguridad por sus debilidades. No está recomendado su uso en los nuevos sistemas y el estándar TLS de cifrado web y los protocolos WPA de cifrado en Wifi lo excluyen.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo RC4. Se tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2 &lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, ejecutamos el siguiente comando y posteriormente introducimos la misma contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' con Chacha20 usando esta vez la funcion ''-pass pass:password'' (desaconsejada).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque en modo de operación de flujo===&lt;br /&gt;
&lt;br /&gt;
Como ya hemos indicado, los modos de operación CFB, OFB y CTR transforman cifradores de bloque en cifradores de flujo, veamos un ejemplo con Triple DES y otro con AES&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior, aunque insistimos en que es mejor no poner esta opción y teclear la contraseña directamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
===== AES - 192 - CFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 192 bits para cifrar con modo CFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se va a cifrar el ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave es mayor (48 caracteres hexadecimales), mientras que el vector de inicialización se mantiene constante en los 32 caracteres hexadecimales (128 bits) del tamaño de bloque, que es el mismo para los tres tamaños de clave de AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para descifrar se haría de la misma manera que en el paso 1, colocando la opción &amp;quot;-d&amp;quot; y permutando los valores de las opciones &amp;quot;-in&amp;quot; y &amp;quot;-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== AES - 256 - OFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 256 bits para cifrar con modo OFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Cifraremos el fichero ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la opción &amp;quot;-pbkdf2&amp;quot; para emplear la derivación de clave más potente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, podemos ejecutar el siguiente comando (que no tiene la opción -pass file:passwd.txt) y posteriormente introducimos la contraseña contenida en dicho fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
Como sabemos, el cifrado asimétrico sólo se puede aplicar a &amp;quot;cosas pequeñas&amp;quot; como claves simétricas o resúmenes. Cualquier intento de cifrar con RSA un fichero normal, de más de 200 caracteres, producirá un error de tipo &amp;quot;input too long&amp;quot;. El envío confidencial de ficheros normales exige el empleo de sistemas mixtos, en los que el fichero se cifra con una clave simétrica (o contraseña) y esa contraseña es cifrada mediante RSA con la clave pública del receptor y así es enviada a dicho receptor, junto con el fichero cifrado. Si además se desea verificar la integridad del envío, se añade un resumen firmado (que a su vez es un cifrado con clave privada del emisor) del fichero original.&lt;br /&gt;
&lt;br /&gt;
Por tanto, desarrollamos un ejemplo en el que el emisor (Alice) envia a Bob el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.aes), el resumen SHA-256 del fichero original, cifrado con su propia clave RSA privada (firmaDoc.rsa) y la contraseña que usó para cifrar el documento, cifrada a su vez con la clave pública RSA de Bob (contraseña.cif). Antes de nada, emisor (Alice) y receptor (Bob) tendrán que haber intercambiado sus claves públicas (publicaAliceRSA.pem y publicaBobRSA.pem) y por supuesto, cada uno conserva su clave privada (privadaAliceRSA.pem y privadaBobRSA.pem).&lt;br /&gt;
&lt;br /&gt;
;Tarea de Alice (emisor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1: Alice cifra con clave simétrica (AES-256-CBC) el fichero &amp;quot;texto.txt&amp;quot; con una contraseña &amp;quot;prueba+12&amp;quot; y produce &amp;quot;texto.aes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2: Alice escribe la contraseña en el fichero &amp;quot;contraseña.txt&amp;quot;, veamos el contenido este fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3: Alice cifra de forma asimétrica el fichero contraseña.txt con la clave pública RSA de Bob (fichero publicaBobRSA.pem) y produce &amp;quot;contraseña.cif&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaBobRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; Paso 4 : Alice firma con su clave privada RSA (privadaAliceRSA.pem) el resumen generado con SHA2-256 del fichero texto.txt y genera el fichero &amp;quot;firmaDoc.rsa&amp;quot;. Lo más normal es que la clave privada de Alice esté cifrada y se le solicite la contraseña al ejecutar este comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadaAliceRSA.pem -out firmaDoc.rsa texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, Alice envía a Bob los tres ficheros: texto.aes, contraseña.cif y firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
; Tarea de Bob (receptor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
Bob recibe el mensaje con los tres ficheros de Alice y procede a descifrar la contraseña enviada por Alice (contraseña.cif) con su clave privada (privadaBob.pem) en el fichero contraseña.txt. Si la clave privada de Bob estuviese cifrada (que es lo más normal), se le solicitará la contraseña que la protege.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoBobRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida contraseña.txt, Bob ya conoce la contraseña que Alice usó para cifrar texto.aes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
Una vez obtenida la contraseña de cifrado simétrica &amp;quot;prueba +12&amp;quot;, Bob puede descifrar el &amp;quot;texto.aes&amp;quot; con dicha contraseña y obtener el documento original (texto.txt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.aes -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
Bob verifica que el resumen SHA-256 del texto descifrado (texto.txt) coincide con el resumen firmado en firmaDoc.rsa. Como Alice firmó el resumen (es decir, lo cifró mediante RSA con su propia clave privada), Bob usa la clave pública de Alice (publicaAliceRSA.pem) para descifrarlo. Si la comprobación es correcta, la transmisión ha tenido CONFIDENCIALIDAD (el texto viajó cifrado con una clave simétrica que viajaba cifrada con RSA) y además INTEGRIDAD (el texto descifrado coincide con el que calculó Alice y envió firmado, es decir, cifrado con su clave privada RSA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaAliceRSA.pem -signature firmaDoc.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: Sabemos que OpenSSL ofrece alternativas para casi todos los comandos. Bob podría realizar este último paso generando el resumen SHA256 del fichero texto.txt en un fichero texto.sha y utilizando el comando &amp;quot;openssl pkeyutl&amp;quot; de la misma forma que se indica en el paso 3 del ejemplo siguiente, con los cambios oportunos.&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del resumen de un fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en formato binario en el fichero de salida &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.sha texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.sha&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.sha -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.sha -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando la curva Curve25519. Como los restantes métodos Diffie-Hellman, permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro o que intercambien sus claves públicas, de forma que la combinación pública-privada en cada extremo produce el mismo valor (secreto) que será utilizado para generar la clave de cifrado simétrico compartida. Esta curva en particular es utilizada por los conocidos sistemas de mensajería móvil Signal y Whatsapp.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada, que contiene la clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados X.509 ==&lt;br /&gt;
&lt;br /&gt;
Un certificado X.509 autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=20</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=20"/>
		<updated>2020-04-02T00:47:44Z</updated>

		<summary type="html">&lt;p&gt;Editor1: /* Resúmenes */ introducción de del opción keyform&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones de resumen o funciones &amp;quot;hash&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones de resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que aceptan cualquier entrada y producen una salida consistente en una ristra de bits de tamaño fijo, que representa un &amp;quot;resumen&amp;quot; de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (mezcla fuerte, dificultad de encontrar colisiones, etc.) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre de la función de resumen utilizada.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -keyform arg&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de la clave (pública o privada) en &amp;quot;arg&amp;quot;, que será PEM (por defecto), DER, P12, ó ENGINE.&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. El resultado será: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;key&amp;quot; como clave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades (se considera &amp;quot;roto&amp;quot; actualmente), se debe conocer como funciona, ya que existe multitud de documentos que han usado este algoritmo a lo largo de los años.&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;En un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto.txt)= 4fa02d78a06b3833c190b464261d8c08&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como ejemplo de cómo varía un resumen ante mínimos cambios en el fichero de entrada, usaremos ahora un fichero &amp;quot;texto2.txt&amp;quot; idéntico, salvo la primera letra en minúsculas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;en un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto2.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto2.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto2.txt)= 5ed88c107e07da73dcfa03893bb8e822&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se observa que es absolutamente diferente del resumen anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
En este caso, demostraremos que cualquier función de resumen produce un &amp;quot;hash&amp;quot; de salida, aunque la entrada sea nula:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  echo &amp;quot;&amp;quot;| openssl dgst -md5 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(stdin)= 68b329da9893e34099c7d8ad5cb9c940&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de resumen que admite cualquier entrada y produce un resultado de 160 bits (20 bytes), que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática (ver la web http://shattered.io) evidenciando así la necesidad de sustituir el empleo de SHA-1 por funciones hash más robustas, como la familia SHA-2 que veremos en el apartado siguiente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA-1 del mismo fichero &amp;quot;texto.txt&amp;quot;, usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es una familia de funciones hash criptográficas, con diversos tamaños de salida en bits (SHA2-224, SHA2-256, SHA2-384 y SHA2-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 224 bits (28 bytes) que generalmente se representan como un número hexadecimal de 56 dígitos de longitud. En las versiones actuales de OpenSSL se acostumbra a nombrar las funciones de la familia SHA-2 indicando directamente el tamaño después de la palabra SHA, es decir, SHA2-224 se nombra como &amp;quot;sha-224&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-224 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 256 bits (32 bytes) que generalmente se representan como un número hexadecimal de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-256 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 384 bits (48 bytes) que generalmente se representan como un número hexadecimal de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 512 bits (64 bytes) que generalmente se representan como un número hexadecimal de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-512 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
La familia de funciones SHA-3 es el último miembro de la familia de estándares de Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto de los algoritmos SHA-2 si se descubre alguna vulnerabilidad en estos. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA-3 genera las mismas longitudes de resumen que SHA-2 (SHA3-224, SHA3-256, SHA3-384 y SHA3-512). En este caso usaremos como ejemplos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave privada o de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector de inicialización, en su caso).&lt;br /&gt;
&lt;br /&gt;
MUY IMPORTANTE: Cuando se cifra con contraseña, OpenSSL pasa esta contraseña, junto con 64 bits aleatorios de sal criptográfica, por un algoritmo de derivación de claves como el PBKDF1 (obsoleto) o el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;). Estos algoritmos utilizan funciones de resumen de forma recursiva para obtener suficientes bits para la clave de cifrado y para el vector de inicialización si es necesario. Esto permite que para una misma contraseña, se generen diferentes claves, al variar en cada caso la sal obtenida aleatoriamente. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos hemos expuesto comandos donde la contraseña aparece explícita y eso es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos. En situaciones de uso real, siempre hemos de intentar que la contraseña sea solicitada por el comando e introducida de forma no visible en pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password'' (aunque desaconsejamos esto)&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra y muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introducirá también el vector de inicialización (-iv IV) salvo que el algoritmo no lo use.&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave (recordemos que PKBDF1 está obsoleto).&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se manipulen ficheros cifrados, hay que saber cuál de las dos versiones se ha usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen ficheros antiguos cifrados con este sistema de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el &amp;quot;craqueo&amp;quot; de contraseñas por fuerza bruta sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits, que es la que utiliza OpenSSL.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha2 . El algoritmo predeterminado es sha2-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operación.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. El &amp;quot;padding&amp;quot; estándar en OpenSSL se describe en la especificación PKCS5. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y usualmente es tan largo como el tamaño de bloque (cifradores en bloque) o como el tamaño de la clave (cifradores en flujo). Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación de algoritmos de cifrado en bloque para cifrado en bloque====&lt;br /&gt;
&lt;br /&gt;
Los modos de operación más comunes son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque. Este problema se puede observar gráficamente si se cifra una imagen en colores sólidos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de algoritmos de cifrado en bloque para cifrado en flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo, ya que el cifrador de bloque se emplea para generar un &amp;quot;keystream&amp;quot; que será combinado con el texto claro bit a bit para producir el texto cifrado. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque con modo de operación de bloque===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más segura, como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este ejemplo cifraremos el fichero de ejemplo texto.txt con DES en modo ECB (recordemos lo peligroso que es este modo de operación ECB y NO LO USEMOS NUNCA EN LA VIDA REAL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 ya que utilizamos la opción &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación CBC, mucho más seguro que el ECB del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña &amp;quot;luna77&amp;quot; en la misma línea de comando (opción no recomendada):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WGQFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt) con dos claves DES. Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - CBC =====&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos un ejemplo de utilización del algoritmo des-ede-cbc para ilustrar el empleo de contraseñas y cómo se introduce automáticamente la sal en el fichero cifrado cuando se emplean contraseñas para el cifrado con cualquier tipo de algoritmo de cifrado y/o modo de operación.&lt;br /&gt;
&lt;br /&gt;
La sal 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica en el texto cifrado por un encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
En este ejemplo, cifraremos con una contraseña y luego usaremos la clave y el IV para el descifrado, eliminando los primeros 16 bytes del fichero cifrado antes de descifrarlo.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre en pantalla la sal, la clave y el vector de inicialización (opción -p):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-cbc -p -in texto.txt -out des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal, el fichero cifrado es binario (no se usó la opción -a) pero los primero ocho caracteres serán textuales, ya que es la cadena &amp;quot;Salted__&amp;quot; que indica que los ocho bits siguientes contienen la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para poder descifrar el fichero con la clave y el IV, primero hemos de &amp;quot;extraer&amp;quot; el texto &amp;quot;Salted__&amp;quot; y los ocho bits de sal (16 bytes en total) como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cbc_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Para verificar que se ha extraido correctamente la sal, se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cbc.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
Para descifrar, se hará uso de la clave y el IV obtenidos por pantalla en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cbc -d -in des_ede3_cbc_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== AES - 128 - CBC =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más utilizados es el RC4 (ya obsoleto), reemplazado en la actualidad por algoritmos más eficientes como el Chacha20 y los modos de operación en flujo (OFB o CFB) de los cifradores de bloque como TDES, AES, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo (nativos)===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se utilizó en algunos de los protocolos más populares como Secure Sockets Layer (SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) para añadir seguridad en las redes inalámbricas. En los últimos años, RC4 se ha excluido de los estándares de alta seguridad por sus debilidades. No está recomendado su uso en los nuevos sistemas y el estándar TLS de cifrado web y los protocolos WPA de cifrado en Wifi lo excluyen.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo RC4. Se tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2 &lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, ejecutamos el siguiente comando y posteriormente introducimos la misma contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' con Chacha20 usando esta vez la funcion ''-pass pass:password'' (desaconsejada).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque en modo de operación de flujo===&lt;br /&gt;
&lt;br /&gt;
Como ya hemos indicado, los modos de operación CFB, OFB y CTR transforman cifradores de bloque en cifradores de flujo, veamos un ejemplo con Triple DES y otro con AES&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior, aunque insistimos en que es mejor no poner esta opción y teclear la contraseña directamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
===== AES - 192 - CFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 192 bits para cifrar con modo CFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se va a cifrar el ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave es mayor (48 caracteres hexadecimales), mientras que el vector de inicialización se mantiene constante en los 32 caracteres hexadecimales (128 bits) del tamaño de bloque, que es el mismo para los tres tamaños de clave de AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para descifrar se haría de la misma manera que en el paso 1, colocando la opción &amp;quot;-d&amp;quot; y permutando los valores de las opciones &amp;quot;-in&amp;quot; y &amp;quot;-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== AES - 256 - OFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 256 bits para cifrar con modo OFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Cifraremos el fichero ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la opción &amp;quot;-pbkdf2&amp;quot; para emplear la derivación de clave más potente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, podemos ejecutar el siguiente comando (que no tiene la opción -pass file:passwd.txt) y posteriormente introducimos la contraseña contenida en dicho fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
Como sabemos, el cifrado asimétrico sólo se puede aplicar a &amp;quot;cosas pequeñas&amp;quot; como claves simétricas o resúmenes. Cualquier intento de cifrar con RSA un fichero normal, de más de 200 caracteres, producirá un error de tipo &amp;quot;input too long&amp;quot;. El envío confidencial de ficheros normales exige el empleo de sistemas mixtos, en los que el fichero se cifra con una clave simétrica (o contraseña) y esa contraseña es cifrada mediante RSA con la clave pública del receptor y así es enviada a dicho receptor, junto con el fichero cifrado. Si además se desea verificar la integridad del envío, se añade un resumen firmado (que a su vez es un cifrado con clave privada del emisor) del fichero original.&lt;br /&gt;
&lt;br /&gt;
Por tanto, desarrollamos un ejemplo en el que el emisor (Alice) envia a Bob el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.aes), el resumen SHA-256 del fichero original, cifrado con su propia clave RSA privada (firmaDoc.rsa) y la contraseña que usó para cifrar el documento, cifrada a su vez con la clave pública RSA de Bob (contraseña.cif). Antes de nada, emisor (Alice) y receptor (Bob) tendrán que haber intercambiado sus claves públicas (publicaAliceRSA.pem y publicaBobRSA.pem) y por supuesto, cada uno conserva su clave privada (privadaAliceRSA.pem y privadaBobRSA.pem).&lt;br /&gt;
&lt;br /&gt;
;Tarea de Alice (emisor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1: Alice cifra con clave simétrica (AES-256-CBC) el fichero &amp;quot;texto.txt&amp;quot; con una contraseña &amp;quot;prueba+12&amp;quot; y produce &amp;quot;texto.aes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2: Alice escribe la contraseña en el fichero &amp;quot;contraseña.txt&amp;quot;, veamos el contenido este fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3: Alice cifra de forma asimétrica el fichero contraseña.txt con la clave pública RSA de Bob (fichero publicaBobRSA.pem) y produce &amp;quot;contraseña.cif&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaBobRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; Paso 4 : Alice firma con su clave privada RSA (privadaAliceRSA.pem) el resumen generado con SHA2-256 del fichero texto.txt y genera el fichero &amp;quot;firmaDoc.rsa&amp;quot;. Lo más normal es que la clave privada de Alice esté cifrada y se le solicite la contraseña al ejecutar este comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadaAliceRSA.pem -out firmaDoc.rsa texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, Alice envía a Bob los tres ficheros: texto.aes, contraseña.cif y firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
; Tarea de Bob (receptor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
Bob recibe el mensaje con los tres ficheros de Alice y procede a descifrar la contraseña enviada por Alice (contraseña.cif) con su clave privada (privadaBob.pem) en el fichero contraseña.txt. Si la clave privada de Bob estuviese cifrada (que es lo más normal), se le solicitará la contraseña que la protege.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoBobRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida contraseña.txt, Bob ya conoce la contraseña que Alice usó para cifrar texto.aes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
Una vez obtenida la contraseña de cifrado simétrica &amp;quot;prueba +12&amp;quot;, Bob puede descifrar el &amp;quot;texto.aes&amp;quot; con dicha contraseña y obtener el documento original (texto.txt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.aes -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
Bob verifica que el resumen SHA-256 del texto descifrado (texto.txt) coincide con el resumen firmado en firmaDoc.rsa. Como Alice firmó el resumen (es decir, lo cifró mediante RSA con su propia clave privada), Bob usa la clave pública de Alice (publicaAliceRSA.pem) para descifrarlo. Si la comprobación es correcta, la transmisión ha tenido CONFIDENCIALIDAD (el texto viajó cifrado con una clave simétrica que viajaba cifrada con RSA) y además INTEGRIDAD (el texto descifrado coincide con el que calculó Alice y envió firmado, es decir, cifrado con su clave privada RSA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaAliceRSA.pem -signature firmaDoc.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: Sabemos que OpenSSL ofrece alternativas para casi todos los comandos. Bob podría realizar este último paso generando el resumen SHA256 del fichero texto.txt en un fichero texto.sha y utilizando el comando &amp;quot;openssl pkeyutl&amp;quot; de la misma forma que se indica en el paso 3 del ejemplo siguiente, con los cambios oportunos.&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del resumen de un fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en formato binario en el fichero de salida &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.sha texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.sha&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.sha -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.sha -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando la curva Curve25519. Como los restantes métodos Diffie-Hellman, permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro o que intercambien sus claves públicas, de forma que la combinación pública-privada en cada extremo produce el mismo valor (secreto) que será utilizado para generar la clave de cifrado simétrico compartida. Esta curva en particular es utilizada por los conocidos sistemas de mensajería móvil Signal y Whatsapp.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada, que contiene la clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados X.509 ==&lt;br /&gt;
&lt;br /&gt;
Un certificado X.509 autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=19</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=19"/>
		<updated>2020-04-02T00:25:51Z</updated>

		<summary type="html">&lt;p&gt;Editor1: /* AES - 192 - CFB */  cambio menor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones de resumen o funciones &amp;quot;hash&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones de resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que aceptan cualquier entrada y producen una salida consistente en una ristra de bits de tamaño fijo, que representa un &amp;quot;resumen&amp;quot; de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (mezcla fuerte, dificultad de encontrar colisiones, etc.) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre de la función de resumen utilizada.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;key&amp;quot; como clave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades (se considera &amp;quot;roto&amp;quot; actualmente), se debe conocer como funciona, ya que existe multitud de documentos que han usado este algoritmo a lo largo de los años.&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;En un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto.txt)= 4fa02d78a06b3833c190b464261d8c08&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como ejemplo de cómo varía un resumen ante mínimos cambios en el fichero de entrada, usaremos ahora un fichero &amp;quot;texto2.txt&amp;quot; idéntico, salvo la primera letra en minúsculas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;en un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto2.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto2.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto2.txt)= 5ed88c107e07da73dcfa03893bb8e822&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se observa que es absolutamente diferente del resumen anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
En este caso, demostraremos que cualquier función de resumen produce un &amp;quot;hash&amp;quot; de salida, aunque la entrada sea nula:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  echo &amp;quot;&amp;quot;| openssl dgst -md5 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(stdin)= 68b329da9893e34099c7d8ad5cb9c940&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de resumen que admite cualquier entrada y produce un resultado de 160 bits (20 bytes), que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática (ver la web http://shattered.io) evidenciando así la necesidad de sustituir el empleo de SHA-1 por funciones hash más robustas, como la familia SHA-2 que veremos en el apartado siguiente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA-1 del mismo fichero &amp;quot;texto.txt&amp;quot;, usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es una familia de funciones hash criptográficas, con diversos tamaños de salida en bits (SHA2-224, SHA2-256, SHA2-384 y SHA2-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 224 bits (28 bytes) que generalmente se representan como un número hexadecimal de 56 dígitos de longitud. En las versiones actuales de OpenSSL se acostumbra a nombrar las funciones de la familia SHA-2 indicando directamente el tamaño después de la palabra SHA, es decir, SHA2-224 se nombra como &amp;quot;sha-224&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-224 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 256 bits (32 bytes) que generalmente se representan como un número hexadecimal de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-256 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 384 bits (48 bytes) que generalmente se representan como un número hexadecimal de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 512 bits (64 bytes) que generalmente se representan como un número hexadecimal de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-512 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
La familia de funciones SHA-3 es el último miembro de la familia de estándares de Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto de los algoritmos SHA-2 si se descubre alguna vulnerabilidad en estos. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA-3 genera las mismas longitudes de resumen que SHA-2 (SHA3-224, SHA3-256, SHA3-384 y SHA3-512). En este caso usaremos como ejemplos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave privada o de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector de inicialización, en su caso).&lt;br /&gt;
&lt;br /&gt;
MUY IMPORTANTE: Cuando se cifra con contraseña, OpenSSL pasa esta contraseña, junto con 64 bits aleatorios de sal criptográfica, por un algoritmo de derivación de claves como el PBKDF1 (obsoleto) o el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;). Estos algoritmos utilizan funciones de resumen de forma recursiva para obtener suficientes bits para la clave de cifrado y para el vector de inicialización si es necesario. Esto permite que para una misma contraseña, se generen diferentes claves, al variar en cada caso la sal obtenida aleatoriamente. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos hemos expuesto comandos donde la contraseña aparece explícita y eso es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos. En situaciones de uso real, siempre hemos de intentar que la contraseña sea solicitada por el comando e introducida de forma no visible en pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password'' (aunque desaconsejamos esto)&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra y muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introducirá también el vector de inicialización (-iv IV) salvo que el algoritmo no lo use.&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave (recordemos que PKBDF1 está obsoleto).&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se manipulen ficheros cifrados, hay que saber cuál de las dos versiones se ha usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen ficheros antiguos cifrados con este sistema de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el &amp;quot;craqueo&amp;quot; de contraseñas por fuerza bruta sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits, que es la que utiliza OpenSSL.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha2 . El algoritmo predeterminado es sha2-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operación.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. El &amp;quot;padding&amp;quot; estándar en OpenSSL se describe en la especificación PKCS5. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y usualmente es tan largo como el tamaño de bloque (cifradores en bloque) o como el tamaño de la clave (cifradores en flujo). Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación de algoritmos de cifrado en bloque para cifrado en bloque====&lt;br /&gt;
&lt;br /&gt;
Los modos de operación más comunes son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque. Este problema se puede observar gráficamente si se cifra una imagen en colores sólidos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de algoritmos de cifrado en bloque para cifrado en flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo, ya que el cifrador de bloque se emplea para generar un &amp;quot;keystream&amp;quot; que será combinado con el texto claro bit a bit para producir el texto cifrado. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque con modo de operación de bloque===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más segura, como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este ejemplo cifraremos el fichero de ejemplo texto.txt con DES en modo ECB (recordemos lo peligroso que es este modo de operación ECB y NO LO USEMOS NUNCA EN LA VIDA REAL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 ya que utilizamos la opción &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación CBC, mucho más seguro que el ECB del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña &amp;quot;luna77&amp;quot; en la misma línea de comando (opción no recomendada):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WGQFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt) con dos claves DES. Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - CBC =====&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos un ejemplo de utilización del algoritmo des-ede-cbc para ilustrar el empleo de contraseñas y cómo se introduce automáticamente la sal en el fichero cifrado cuando se emplean contraseñas para el cifrado con cualquier tipo de algoritmo de cifrado y/o modo de operación.&lt;br /&gt;
&lt;br /&gt;
La sal 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica en el texto cifrado por un encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
En este ejemplo, cifraremos con una contraseña y luego usaremos la clave y el IV para el descifrado, eliminando los primeros 16 bytes del fichero cifrado antes de descifrarlo.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre en pantalla la sal, la clave y el vector de inicialización (opción -p):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-cbc -p -in texto.txt -out des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal, el fichero cifrado es binario (no se usó la opción -a) pero los primero ocho caracteres serán textuales, ya que es la cadena &amp;quot;Salted__&amp;quot; que indica que los ocho bits siguientes contienen la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para poder descifrar el fichero con la clave y el IV, primero hemos de &amp;quot;extraer&amp;quot; el texto &amp;quot;Salted__&amp;quot; y los ocho bits de sal (16 bytes en total) como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cbc_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Para verificar que se ha extraido correctamente la sal, se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cbc.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
Para descifrar, se hará uso de la clave y el IV obtenidos por pantalla en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cbc -d -in des_ede3_cbc_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== AES - 128 - CBC =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más utilizados es el RC4 (ya obsoleto), reemplazado en la actualidad por algoritmos más eficientes como el Chacha20 y los modos de operación en flujo (OFB o CFB) de los cifradores de bloque como TDES, AES, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo (nativos)===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se utilizó en algunos de los protocolos más populares como Secure Sockets Layer (SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) para añadir seguridad en las redes inalámbricas. En los últimos años, RC4 se ha excluido de los estándares de alta seguridad por sus debilidades. No está recomendado su uso en los nuevos sistemas y el estándar TLS de cifrado web y los protocolos WPA de cifrado en Wifi lo excluyen.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo RC4. Se tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2 &lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, ejecutamos el siguiente comando y posteriormente introducimos la misma contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' con Chacha20 usando esta vez la funcion ''-pass pass:password'' (desaconsejada).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque en modo de operación de flujo===&lt;br /&gt;
&lt;br /&gt;
Como ya hemos indicado, los modos de operación CFB, OFB y CTR transforman cifradores de bloque en cifradores de flujo, veamos un ejemplo con Triple DES y otro con AES&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior, aunque insistimos en que es mejor no poner esta opción y teclear la contraseña directamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
===== AES - 192 - CFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 192 bits para cifrar con modo CFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se va a cifrar el ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave es mayor (48 caracteres hexadecimales), mientras que el vector de inicialización se mantiene constante en los 32 caracteres hexadecimales (128 bits) del tamaño de bloque, que es el mismo para los tres tamaños de clave de AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para descifrar se haría de la misma manera que en el paso 1, colocando la opción &amp;quot;-d&amp;quot; y permutando los valores de las opciones &amp;quot;-in&amp;quot; y &amp;quot;-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== AES - 256 - OFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 256 bits para cifrar con modo OFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Cifraremos el fichero ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la opción &amp;quot;-pbkdf2&amp;quot; para emplear la derivación de clave más potente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, podemos ejecutar el siguiente comando (que no tiene la opción -pass file:passwd.txt) y posteriormente introducimos la contraseña contenida en dicho fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
Como sabemos, el cifrado asimétrico sólo se puede aplicar a &amp;quot;cosas pequeñas&amp;quot; como claves simétricas o resúmenes. Cualquier intento de cifrar con RSA un fichero normal, de más de 200 caracteres, producirá un error de tipo &amp;quot;input too long&amp;quot;. El envío confidencial de ficheros normales exige el empleo de sistemas mixtos, en los que el fichero se cifra con una clave simétrica (o contraseña) y esa contraseña es cifrada mediante RSA con la clave pública del receptor y así es enviada a dicho receptor, junto con el fichero cifrado. Si además se desea verificar la integridad del envío, se añade un resumen firmado (que a su vez es un cifrado con clave privada del emisor) del fichero original.&lt;br /&gt;
&lt;br /&gt;
Por tanto, desarrollamos un ejemplo en el que el emisor (Alice) envia a Bob el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.aes), el resumen SHA-256 del fichero original, cifrado con su propia clave RSA privada (firmaDoc.rsa) y la contraseña que usó para cifrar el documento, cifrada a su vez con la clave pública RSA de Bob (contraseña.cif). Antes de nada, emisor (Alice) y receptor (Bob) tendrán que haber intercambiado sus claves públicas (publicaAliceRSA.pem y publicaBobRSA.pem) y por supuesto, cada uno conserva su clave privada (privadaAliceRSA.pem y privadaBobRSA.pem).&lt;br /&gt;
&lt;br /&gt;
;Tarea de Alice (emisor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1: Alice cifra con clave simétrica (AES-256-CBC) el fichero &amp;quot;texto.txt&amp;quot; con una contraseña &amp;quot;prueba+12&amp;quot; y produce &amp;quot;texto.aes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2: Alice escribe la contraseña en el fichero &amp;quot;contraseña.txt&amp;quot;, veamos el contenido este fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3: Alice cifra de forma asimétrica el fichero contraseña.txt con la clave pública RSA de Bob (fichero publicaBobRSA.pem) y produce &amp;quot;contraseña.cif&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaBobRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; Paso 4 : Alice firma con su clave privada RSA (privadaAliceRSA.pem) el resumen generado con SHA2-256 del fichero texto.txt y genera el fichero &amp;quot;firmaDoc.rsa&amp;quot;. Lo más normal es que la clave privada de Alice esté cifrada y se le solicite la contraseña al ejecutar este comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadaAliceRSA.pem -out firmaDoc.rsa texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, Alice envía a Bob los tres ficheros: texto.aes, contraseña.cif y firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
; Tarea de Bob (receptor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
Bob recibe el mensaje con los tres ficheros de Alice y procede a descifrar la contraseña enviada por Alice (contraseña.cif) con su clave privada (privadaBob.pem) en el fichero contraseña.txt. Si la clave privada de Bob estuviese cifrada (que es lo más normal), se le solicitará la contraseña que la protege.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoBobRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida contraseña.txt, Bob ya conoce la contraseña que Alice usó para cifrar texto.aes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
Una vez obtenida la contraseña de cifrado simétrica &amp;quot;prueba +12&amp;quot;, Bob puede descifrar el &amp;quot;texto.aes&amp;quot; con dicha contraseña y obtener el documento original (texto.txt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.aes -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
Bob verifica que el resumen SHA-256 del texto descifrado (texto.txt) coincide con el resumen firmado en firmaDoc.rsa. Como Alice firmó el resumen (es decir, lo cifró mediante RSA con su propia clave privada), Bob usa la clave pública de Alice (publicaAliceRSA.pem) para descifrarlo. Si la comprobación es correcta, la transmisión ha tenido CONFIDENCIALIDAD (el texto viajó cifrado con una clave simétrica que viajaba cifrada con RSA) y además INTEGRIDAD (el texto descifrado coincide con el que calculó Alice y envió firmado, es decir, cifrado con su clave privada RSA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaAliceRSA.pem -signature firmaDoc.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: Sabemos que OpenSSL ofrece alternativas para casi todos los comandos. Bob podría realizar este último paso generando el resumen SHA256 del fichero texto.txt en un fichero texto.sha y utilizando el comando &amp;quot;openssl pkeyutl&amp;quot; de la misma forma que se indica en el paso 3 del ejemplo siguiente, con los cambios oportunos.&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del resumen de un fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en formato binario en el fichero de salida &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.sha texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.sha&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.sha -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.sha -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando la curva Curve25519. Como los restantes métodos Diffie-Hellman, permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro o que intercambien sus claves públicas, de forma que la combinación pública-privada en cada extremo produce el mismo valor (secreto) que será utilizado para generar la clave de cifrado simétrico compartida. Esta curva en particular es utilizada por los conocidos sistemas de mensajería móvil Signal y Whatsapp.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada, que contiene la clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados X.509 ==&lt;br /&gt;
&lt;br /&gt;
Un certificado X.509 autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=18</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=18"/>
		<updated>2020-03-25T01:41:38Z</updated>

		<summary type="html">&lt;p&gt;Editor1: /* X25519 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones de resumen o funciones &amp;quot;hash&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones de resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que aceptan cualquier entrada y producen una salida consistente en una ristra de bits de tamaño fijo, que representa un &amp;quot;resumen&amp;quot; de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (mezcla fuerte, dificultad de encontrar colisiones, etc.) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre de la función de resumen utilizada.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;key&amp;quot; como clave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades (se considera &amp;quot;roto&amp;quot; actualmente), se debe conocer como funciona, ya que existe multitud de documentos que han usado este algoritmo a lo largo de los años.&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;En un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto.txt)= 4fa02d78a06b3833c190b464261d8c08&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como ejemplo de cómo varía un resumen ante mínimos cambios en el fichero de entrada, usaremos ahora un fichero &amp;quot;texto2.txt&amp;quot; idéntico, salvo la primera letra en minúsculas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;en un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto2.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto2.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto2.txt)= 5ed88c107e07da73dcfa03893bb8e822&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se observa que es absolutamente diferente del resumen anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
En este caso, demostraremos que cualquier función de resumen produce un &amp;quot;hash&amp;quot; de salida, aunque la entrada sea nula:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  echo &amp;quot;&amp;quot;| openssl dgst -md5 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(stdin)= 68b329da9893e34099c7d8ad5cb9c940&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de resumen que admite cualquier entrada y produce un resultado de 160 bits (20 bytes), que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática (ver la web http://shattered.io) evidenciando así la necesidad de sustituir el empleo de SHA-1 por funciones hash más robustas, como la familia SHA-2 que veremos en el apartado siguiente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA-1 del mismo fichero &amp;quot;texto.txt&amp;quot;, usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es una familia de funciones hash criptográficas, con diversos tamaños de salida en bits (SHA2-224, SHA2-256, SHA2-384 y SHA2-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 224 bits (28 bytes) que generalmente se representan como un número hexadecimal de 56 dígitos de longitud. En las versiones actuales de OpenSSL se acostumbra a nombrar las funciones de la familia SHA-2 indicando directamente el tamaño después de la palabra SHA, es decir, SHA2-224 se nombra como &amp;quot;sha-224&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-224 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 256 bits (32 bytes) que generalmente se representan como un número hexadecimal de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-256 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 384 bits (48 bytes) que generalmente se representan como un número hexadecimal de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 512 bits (64 bytes) que generalmente se representan como un número hexadecimal de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-512 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
La familia de funciones SHA-3 es el último miembro de la familia de estándares de Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto de los algoritmos SHA-2 si se descubre alguna vulnerabilidad en estos. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA-3 genera las mismas longitudes de resumen que SHA-2 (SHA3-224, SHA3-256, SHA3-384 y SHA3-512). En este caso usaremos como ejemplos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave privada o de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector de inicialización, en su caso).&lt;br /&gt;
&lt;br /&gt;
MUY IMPORTANTE: Cuando se cifra con contraseña, OpenSSL pasa esta contraseña, junto con 64 bits aleatorios de sal criptográfica, por un algoritmo de derivación de claves como el PBKDF1 (obsoleto) o el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;). Estos algoritmos utilizan funciones de resumen de forma recursiva para obtener suficientes bits para la clave de cifrado y para el vector de inicialización si es necesario. Esto permite que para una misma contraseña, se generen diferentes claves, al variar en cada caso la sal obtenida aleatoriamente. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos hemos expuesto comandos donde la contraseña aparece explícita y eso es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos. En situaciones de uso real, siempre hemos de intentar que la contraseña sea solicitada por el comando e introducida de forma no visible en pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password'' (aunque desaconsejamos esto)&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra y muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introducirá también el vector de inicialización (-iv IV) salvo que el algoritmo no lo use.&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave (recordemos que PKBDF1 está obsoleto).&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se manipulen ficheros cifrados, hay que saber cuál de las dos versiones se ha usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen ficheros antiguos cifrados con este sistema de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el &amp;quot;craqueo&amp;quot; de contraseñas por fuerza bruta sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits, que es la que utiliza OpenSSL.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha2 . El algoritmo predeterminado es sha2-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operación.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. El &amp;quot;padding&amp;quot; estándar en OpenSSL se describe en la especificación PKCS5. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y usualmente es tan largo como el tamaño de bloque (cifradores en bloque) o como el tamaño de la clave (cifradores en flujo). Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación de algoritmos de cifrado en bloque para cifrado en bloque====&lt;br /&gt;
&lt;br /&gt;
Los modos de operación más comunes son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque. Este problema se puede observar gráficamente si se cifra una imagen en colores sólidos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de algoritmos de cifrado en bloque para cifrado en flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo, ya que el cifrador de bloque se emplea para generar un &amp;quot;keystream&amp;quot; que será combinado con el texto claro bit a bit para producir el texto cifrado. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque con modo de operación de bloque===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más segura, como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este ejemplo cifraremos el fichero de ejemplo texto.txt con DES en modo ECB (recordemos lo peligroso que es este modo de operación ECB y NO LO USEMOS NUNCA EN LA VIDA REAL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 ya que utilizamos la opción &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación CBC, mucho más seguro que el ECB del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña &amp;quot;luna77&amp;quot; en la misma línea de comando (opción no recomendada):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WGQFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt) con dos claves DES. Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - CBC =====&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos un ejemplo de utilización del algoritmo des-ede-cbc para ilustrar el empleo de contraseñas y cómo se introduce automáticamente la sal en el fichero cifrado cuando se emplean contraseñas para el cifrado con cualquier tipo de algoritmo de cifrado y/o modo de operación.&lt;br /&gt;
&lt;br /&gt;
La sal 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica en el texto cifrado por un encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
En este ejemplo, cifraremos con una contraseña y luego usaremos la clave y el IV para el descifrado, eliminando los primeros 16 bytes del fichero cifrado antes de descifrarlo.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre en pantalla la sal, la clave y el vector de inicialización (opción -p):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-cbc -p -in texto.txt -out des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal, el fichero cifrado es binario (no se usó la opción -a) pero los primero ocho caracteres serán textuales, ya que es la cadena &amp;quot;Salted__&amp;quot; que indica que los ocho bits siguientes contienen la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para poder descifrar el fichero con la clave y el IV, primero hemos de &amp;quot;extraer&amp;quot; el texto &amp;quot;Salted__&amp;quot; y los ocho bits de sal (16 bytes en total) como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cbc_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Para verificar que se ha extraido correctamente la sal, se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cbc.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
Para descifrar, se hará uso de la clave y el IV obtenidos por pantalla en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cbc -d -in des_ede3_cbc_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== AES - 128 - CBC =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más utilizados es el RC4 (ya obsoleto), reemplazado en la actualidad por algoritmos más eficientes como el Chacha20 y los modos de operación en flujo (OFB o CFB) de los cifradores de bloque como TDES, AES, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo (nativos)===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se utilizó en algunos de los protocolos más populares como Secure Sockets Layer (SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) para añadir seguridad en las redes inalámbricas. En los últimos años, RC4 se ha excluido de los estándares de alta seguridad por sus debilidades. No está recomendado su uso en los nuevos sistemas y el estándar TLS de cifrado web y los protocolos WPA de cifrado en Wifi lo excluyen.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo RC4. Se tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2 &lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, ejecutamos el siguiente comando y posteriormente introducimos la misma contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' con Chacha20 usando esta vez la funcion ''-pass pass:password'' (desaconsejada).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque en modo de operación de flujo===&lt;br /&gt;
&lt;br /&gt;
Como ya hemos indicado, los modos de operación CFB, OFB y CTR transforman cifradores de bloque en cifradores de flujo, veamos un ejemplo con Triple DES y otro con AES&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior, aunque insistimos en que es mejor no poner esta opción y teclear la contraseña directamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
===== AES - 192 - CFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 192 bits para cifrar con modo CFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se va a cifrar el ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para descifrar se haría de la misma manera que en el paso 1, colocando la opción &amp;quot;-d&amp;quot; y permutando los valores de las opciones &amp;quot;-in&amp;quot; y &amp;quot;-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== AES - 256 - OFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 256 bits para cifrar con modo OFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Cifraremos el fichero ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la opción &amp;quot;-pbkdf2&amp;quot; para emplear la derivación de clave más potente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, podemos ejecutar el siguiente comando (que no tiene la opción -pass file:passwd.txt) y posteriormente introducimos la contraseña contenida en dicho fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
Como sabemos, el cifrado asimétrico sólo se puede aplicar a &amp;quot;cosas pequeñas&amp;quot; como claves simétricas o resúmenes. Cualquier intento de cifrar con RSA un fichero normal, de más de 200 caracteres, producirá un error de tipo &amp;quot;input too long&amp;quot;. El envío confidencial de ficheros normales exige el empleo de sistemas mixtos, en los que el fichero se cifra con una clave simétrica (o contraseña) y esa contraseña es cifrada mediante RSA con la clave pública del receptor y así es enviada a dicho receptor, junto con el fichero cifrado. Si además se desea verificar la integridad del envío, se añade un resumen firmado (que a su vez es un cifrado con clave privada del emisor) del fichero original.&lt;br /&gt;
&lt;br /&gt;
Por tanto, desarrollamos un ejemplo en el que el emisor (Alice) envia a Bob el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.aes), el resumen SHA-256 del fichero original, cifrado con su propia clave RSA privada (firmaDoc.rsa) y la contraseña que usó para cifrar el documento, cifrada a su vez con la clave pública RSA de Bob (contraseña.cif). Antes de nada, emisor (Alice) y receptor (Bob) tendrán que haber intercambiado sus claves públicas (publicaAliceRSA.pem y publicaBobRSA.pem) y por supuesto, cada uno conserva su clave privada (privadaAliceRSA.pem y privadaBobRSA.pem).&lt;br /&gt;
&lt;br /&gt;
;Tarea de Alice (emisor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1: Alice cifra con clave simétrica (AES-256-CBC) el fichero &amp;quot;texto.txt&amp;quot; con una contraseña &amp;quot;prueba+12&amp;quot; y produce &amp;quot;texto.aes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2: Alice escribe la contraseña en el fichero &amp;quot;contraseña.txt&amp;quot;, veamos el contenido este fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3: Alice cifra de forma asimétrica el fichero contraseña.txt con la clave pública RSA de Bob (fichero publicaBobRSA.pem) y produce &amp;quot;contraseña.cif&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaBobRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; Paso 4 : Alice firma con su clave privada RSA (privadaAliceRSA.pem) el resumen generado con SHA2-256 del fichero texto.txt y genera el fichero &amp;quot;firmaDoc.rsa&amp;quot;. Lo más normal es que la clave privada de Alice esté cifrada y se le solicite la contraseña al ejecutar este comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadaAliceRSA.pem -out firmaDoc.rsa texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, Alice envía a Bob los tres ficheros: texto.aes, contraseña.cif y firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
; Tarea de Bob (receptor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
Bob recibe el mensaje con los tres ficheros de Alice y procede a descifrar la contraseña enviada por Alice (contraseña.cif) con su clave privada (privadaBob.pem) en el fichero contraseña.txt. Si la clave privada de Bob estuviese cifrada (que es lo más normal), se le solicitará la contraseña que la protege.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoBobRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida contraseña.txt, Bob ya conoce la contraseña que Alice usó para cifrar texto.aes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
Una vez obtenida la contraseña de cifrado simétrica &amp;quot;prueba +12&amp;quot;, Bob puede descifrar el &amp;quot;texto.aes&amp;quot; con dicha contraseña y obtener el documento original (texto.txt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.aes -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
Bob verifica que el resumen SHA-256 del texto descifrado (texto.txt) coincide con el resumen firmado en firmaDoc.rsa. Como Alice firmó el resumen (es decir, lo cifró mediante RSA con su propia clave privada), Bob usa la clave pública de Alice (publicaAliceRSA.pem) para descifrarlo. Si la comprobación es correcta, la transmisión ha tenido CONFIDENCIALIDAD (el texto viajó cifrado con una clave simétrica que viajaba cifrada con RSA) y además INTEGRIDAD (el texto descifrado coincide con el que calculó Alice y envió firmado, es decir, cifrado con su clave privada RSA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaAliceRSA.pem -signature firmaDoc.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: Sabemos que OpenSSL ofrece alternativas para casi todos los comandos. Bob podría realizar este último paso generando el resumen SHA256 del fichero texto.txt en un fichero texto.sha y utilizando el comando &amp;quot;openssl pkeyutl&amp;quot; de la misma forma que se indica en el paso 3 del ejemplo siguiente, con los cambios oportunos.&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del resumen de un fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en formato binario en el fichero de salida &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.sha texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.sha&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.sha -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.sha -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando la curva Curve25519. Como los restantes métodos Diffie-Hellman, permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro o que intercambien sus claves públicas, de forma que la combinación pública-privada en cada extremo produce el mismo valor (secreto) que será utilizado para generar la clave de cifrado simétrico compartida. Esta curva en particular es utilizada por los conocidos sistemas de mensajería móvil Signal y Whatsapp.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada, que contiene la clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados X.509 ==&lt;br /&gt;
&lt;br /&gt;
Un certificado X.509 autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=17</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=17"/>
		<updated>2020-03-25T01:32:37Z</updated>

		<summary type="html">&lt;p&gt;Editor1: /* Cifrado Asimétrico */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones de resumen o funciones &amp;quot;hash&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones de resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que aceptan cualquier entrada y producen una salida consistente en una ristra de bits de tamaño fijo, que representa un &amp;quot;resumen&amp;quot; de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (mezcla fuerte, dificultad de encontrar colisiones, etc.) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre de la función de resumen utilizada.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;key&amp;quot; como clave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades (se considera &amp;quot;roto&amp;quot; actualmente), se debe conocer como funciona, ya que existe multitud de documentos que han usado este algoritmo a lo largo de los años.&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;En un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto.txt)= 4fa02d78a06b3833c190b464261d8c08&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como ejemplo de cómo varía un resumen ante mínimos cambios en el fichero de entrada, usaremos ahora un fichero &amp;quot;texto2.txt&amp;quot; idéntico, salvo la primera letra en minúsculas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;en un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto2.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto2.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto2.txt)= 5ed88c107e07da73dcfa03893bb8e822&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se observa que es absolutamente diferente del resumen anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
En este caso, demostraremos que cualquier función de resumen produce un &amp;quot;hash&amp;quot; de salida, aunque la entrada sea nula:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  echo &amp;quot;&amp;quot;| openssl dgst -md5 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(stdin)= 68b329da9893e34099c7d8ad5cb9c940&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de resumen que admite cualquier entrada y produce un resultado de 160 bits (20 bytes), que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática (ver la web http://shattered.io) evidenciando así la necesidad de sustituir el empleo de SHA-1 por funciones hash más robustas, como la familia SHA-2 que veremos en el apartado siguiente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA-1 del mismo fichero &amp;quot;texto.txt&amp;quot;, usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es una familia de funciones hash criptográficas, con diversos tamaños de salida en bits (SHA2-224, SHA2-256, SHA2-384 y SHA2-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 224 bits (28 bytes) que generalmente se representan como un número hexadecimal de 56 dígitos de longitud. En las versiones actuales de OpenSSL se acostumbra a nombrar las funciones de la familia SHA-2 indicando directamente el tamaño después de la palabra SHA, es decir, SHA2-224 se nombra como &amp;quot;sha-224&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-224 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 256 bits (32 bytes) que generalmente se representan como un número hexadecimal de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-256 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 384 bits (48 bytes) que generalmente se representan como un número hexadecimal de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 512 bits (64 bytes) que generalmente se representan como un número hexadecimal de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-512 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
La familia de funciones SHA-3 es el último miembro de la familia de estándares de Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto de los algoritmos SHA-2 si se descubre alguna vulnerabilidad en estos. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA-3 genera las mismas longitudes de resumen que SHA-2 (SHA3-224, SHA3-256, SHA3-384 y SHA3-512). En este caso usaremos como ejemplos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave privada o de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector de inicialización, en su caso).&lt;br /&gt;
&lt;br /&gt;
MUY IMPORTANTE: Cuando se cifra con contraseña, OpenSSL pasa esta contraseña, junto con 64 bits aleatorios de sal criptográfica, por un algoritmo de derivación de claves como el PBKDF1 (obsoleto) o el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;). Estos algoritmos utilizan funciones de resumen de forma recursiva para obtener suficientes bits para la clave de cifrado y para el vector de inicialización si es necesario. Esto permite que para una misma contraseña, se generen diferentes claves, al variar en cada caso la sal obtenida aleatoriamente. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos hemos expuesto comandos donde la contraseña aparece explícita y eso es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos. En situaciones de uso real, siempre hemos de intentar que la contraseña sea solicitada por el comando e introducida de forma no visible en pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password'' (aunque desaconsejamos esto)&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra y muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introducirá también el vector de inicialización (-iv IV) salvo que el algoritmo no lo use.&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave (recordemos que PKBDF1 está obsoleto).&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se manipulen ficheros cifrados, hay que saber cuál de las dos versiones se ha usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen ficheros antiguos cifrados con este sistema de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el &amp;quot;craqueo&amp;quot; de contraseñas por fuerza bruta sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits, que es la que utiliza OpenSSL.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha2 . El algoritmo predeterminado es sha2-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operación.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. El &amp;quot;padding&amp;quot; estándar en OpenSSL se describe en la especificación PKCS5. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y usualmente es tan largo como el tamaño de bloque (cifradores en bloque) o como el tamaño de la clave (cifradores en flujo). Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación de algoritmos de cifrado en bloque para cifrado en bloque====&lt;br /&gt;
&lt;br /&gt;
Los modos de operación más comunes son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque. Este problema se puede observar gráficamente si se cifra una imagen en colores sólidos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de algoritmos de cifrado en bloque para cifrado en flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo, ya que el cifrador de bloque se emplea para generar un &amp;quot;keystream&amp;quot; que será combinado con el texto claro bit a bit para producir el texto cifrado. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque con modo de operación de bloque===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más segura, como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este ejemplo cifraremos el fichero de ejemplo texto.txt con DES en modo ECB (recordemos lo peligroso que es este modo de operación ECB y NO LO USEMOS NUNCA EN LA VIDA REAL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 ya que utilizamos la opción &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación CBC, mucho más seguro que el ECB del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña &amp;quot;luna77&amp;quot; en la misma línea de comando (opción no recomendada):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WGQFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt) con dos claves DES. Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - CBC =====&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos un ejemplo de utilización del algoritmo des-ede-cbc para ilustrar el empleo de contraseñas y cómo se introduce automáticamente la sal en el fichero cifrado cuando se emplean contraseñas para el cifrado con cualquier tipo de algoritmo de cifrado y/o modo de operación.&lt;br /&gt;
&lt;br /&gt;
La sal 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica en el texto cifrado por un encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
En este ejemplo, cifraremos con una contraseña y luego usaremos la clave y el IV para el descifrado, eliminando los primeros 16 bytes del fichero cifrado antes de descifrarlo.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre en pantalla la sal, la clave y el vector de inicialización (opción -p):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-cbc -p -in texto.txt -out des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal, el fichero cifrado es binario (no se usó la opción -a) pero los primero ocho caracteres serán textuales, ya que es la cadena &amp;quot;Salted__&amp;quot; que indica que los ocho bits siguientes contienen la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para poder descifrar el fichero con la clave y el IV, primero hemos de &amp;quot;extraer&amp;quot; el texto &amp;quot;Salted__&amp;quot; y los ocho bits de sal (16 bytes en total) como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cbc_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Para verificar que se ha extraido correctamente la sal, se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cbc.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
Para descifrar, se hará uso de la clave y el IV obtenidos por pantalla en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cbc -d -in des_ede3_cbc_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== AES - 128 - CBC =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más utilizados es el RC4 (ya obsoleto), reemplazado en la actualidad por algoritmos más eficientes como el Chacha20 y los modos de operación en flujo (OFB o CFB) de los cifradores de bloque como TDES, AES, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo (nativos)===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se utilizó en algunos de los protocolos más populares como Secure Sockets Layer (SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) para añadir seguridad en las redes inalámbricas. En los últimos años, RC4 se ha excluido de los estándares de alta seguridad por sus debilidades. No está recomendado su uso en los nuevos sistemas y el estándar TLS de cifrado web y los protocolos WPA de cifrado en Wifi lo excluyen.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo RC4. Se tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2 &lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, ejecutamos el siguiente comando y posteriormente introducimos la misma contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' con Chacha20 usando esta vez la funcion ''-pass pass:password'' (desaconsejada).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque en modo de operación de flujo===&lt;br /&gt;
&lt;br /&gt;
Como ya hemos indicado, los modos de operación CFB, OFB y CTR transforman cifradores de bloque en cifradores de flujo, veamos un ejemplo con Triple DES y otro con AES&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior, aunque insistimos en que es mejor no poner esta opción y teclear la contraseña directamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
===== AES - 192 - CFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 192 bits para cifrar con modo CFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se va a cifrar el ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para descifrar se haría de la misma manera que en el paso 1, colocando la opción &amp;quot;-d&amp;quot; y permutando los valores de las opciones &amp;quot;-in&amp;quot; y &amp;quot;-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== AES - 256 - OFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 256 bits para cifrar con modo OFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Cifraremos el fichero ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la opción &amp;quot;-pbkdf2&amp;quot; para emplear la derivación de clave más potente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, podemos ejecutar el siguiente comando (que no tiene la opción -pass file:passwd.txt) y posteriormente introducimos la contraseña contenida en dicho fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
Como sabemos, el cifrado asimétrico sólo se puede aplicar a &amp;quot;cosas pequeñas&amp;quot; como claves simétricas o resúmenes. Cualquier intento de cifrar con RSA un fichero normal, de más de 200 caracteres, producirá un error de tipo &amp;quot;input too long&amp;quot;. El envío confidencial de ficheros normales exige el empleo de sistemas mixtos, en los que el fichero se cifra con una clave simétrica (o contraseña) y esa contraseña es cifrada mediante RSA con la clave pública del receptor y así es enviada a dicho receptor, junto con el fichero cifrado. Si además se desea verificar la integridad del envío, se añade un resumen firmado (que a su vez es un cifrado con clave privada del emisor) del fichero original.&lt;br /&gt;
&lt;br /&gt;
Por tanto, desarrollamos un ejemplo en el que el emisor (Alice) envia a Bob el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.aes), el resumen SHA-256 del fichero original, cifrado con su propia clave RSA privada (firmaDoc.rsa) y la contraseña que usó para cifrar el documento, cifrada a su vez con la clave pública RSA de Bob (contraseña.cif). Antes de nada, emisor (Alice) y receptor (Bob) tendrán que haber intercambiado sus claves públicas (publicaAliceRSA.pem y publicaBobRSA.pem) y por supuesto, cada uno conserva su clave privada (privadaAliceRSA.pem y privadaBobRSA.pem).&lt;br /&gt;
&lt;br /&gt;
;Tarea de Alice (emisor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1: Alice cifra con clave simétrica (AES-256-CBC) el fichero &amp;quot;texto.txt&amp;quot; con una contraseña &amp;quot;prueba+12&amp;quot; y produce &amp;quot;texto.aes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2: Alice escribe la contraseña en el fichero &amp;quot;contraseña.txt&amp;quot;, veamos el contenido este fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3: Alice cifra de forma asimétrica el fichero contraseña.txt con la clave pública RSA de Bob (fichero publicaBobRSA.pem) y produce &amp;quot;contraseña.cif&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaBobRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; Paso 4 : Alice firma con su clave privada RSA (privadaAliceRSA.pem) el resumen generado con SHA2-256 del fichero texto.txt y genera el fichero &amp;quot;firmaDoc.rsa&amp;quot;. Lo más normal es que la clave privada de Alice esté cifrada y se le solicite la contraseña al ejecutar este comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadaAliceRSA.pem -out firmaDoc.rsa texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, Alice envía a Bob los tres ficheros: texto.aes, contraseña.cif y firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
; Tarea de Bob (receptor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
Bob recibe el mensaje con los tres ficheros de Alice y procede a descifrar la contraseña enviada por Alice (contraseña.cif) con su clave privada (privadaBob.pem) en el fichero contraseña.txt. Si la clave privada de Bob estuviese cifrada (que es lo más normal), se le solicitará la contraseña que la protege.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoBobRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida contraseña.txt, Bob ya conoce la contraseña que Alice usó para cifrar texto.aes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
Una vez obtenida la contraseña de cifrado simétrica &amp;quot;prueba +12&amp;quot;, Bob puede descifrar el &amp;quot;texto.aes&amp;quot; con dicha contraseña y obtener el documento original (texto.txt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.aes -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
Bob verifica que el resumen SHA-256 del texto descifrado (texto.txt) coincide con el resumen firmado en firmaDoc.rsa. Como Alice firmó el resumen (es decir, lo cifró mediante RSA con su propia clave privada), Bob usa la clave pública de Alice (publicaAliceRSA.pem) para descifrarlo. Si la comprobación es correcta, la transmisión ha tenido CONFIDENCIALIDAD (el texto viajó cifrado con una clave simétrica que viajaba cifrada con RSA) y además INTEGRIDAD (el texto descifrado coincide con el que calculó Alice y envió firmado, es decir, cifrado con su clave privada RSA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaAliceRSA.pem -signature firmaDoc.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: Sabemos que OpenSSL ofrece alternativas para casi todos los comandos. Bob podría realizar este último paso generando el resumen SHA256 del fichero texto.txt en un fichero texto.sha y utilizando el comando &amp;quot;openssl pkeyutl&amp;quot; de la misma forma que se indica en el paso 3 del ejemplo siguiente, con los cambios oportunos.&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del resumen de un fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en formato binario en el fichero de salida &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.sha texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.sha&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.sha -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.sha -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados X.509 ==&lt;br /&gt;
&lt;br /&gt;
Un certificado X.509 autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=16</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=16"/>
		<updated>2020-03-25T01:10:05Z</updated>

		<summary type="html">&lt;p&gt;Editor1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones de resumen o funciones &amp;quot;hash&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones de resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que aceptan cualquier entrada y producen una salida consistente en una ristra de bits de tamaño fijo, que representa un &amp;quot;resumen&amp;quot; de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (mezcla fuerte, dificultad de encontrar colisiones, etc.) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre de la función de resumen utilizada.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;key&amp;quot; como clave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades (se considera &amp;quot;roto&amp;quot; actualmente), se debe conocer como funciona, ya que existe multitud de documentos que han usado este algoritmo a lo largo de los años.&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;En un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto.txt)= 4fa02d78a06b3833c190b464261d8c08&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como ejemplo de cómo varía un resumen ante mínimos cambios en el fichero de entrada, usaremos ahora un fichero &amp;quot;texto2.txt&amp;quot; idéntico, salvo la primera letra en minúsculas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;en un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto2.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto2.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto2.txt)= 5ed88c107e07da73dcfa03893bb8e822&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se observa que es absolutamente diferente del resumen anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
En este caso, demostraremos que cualquier función de resumen produce un &amp;quot;hash&amp;quot; de salida, aunque la entrada sea nula:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  echo &amp;quot;&amp;quot;| openssl dgst -md5 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(stdin)= 68b329da9893e34099c7d8ad5cb9c940&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de resumen que admite cualquier entrada y produce un resultado de 160 bits (20 bytes), que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática (ver la web http://shattered.io) evidenciando así la necesidad de sustituir el empleo de SHA-1 por funciones hash más robustas, como la familia SHA-2 que veremos en el apartado siguiente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA-1 del mismo fichero &amp;quot;texto.txt&amp;quot;, usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es una familia de funciones hash criptográficas, con diversos tamaños de salida en bits (SHA2-224, SHA2-256, SHA2-384 y SHA2-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 224 bits (28 bytes) que generalmente se representan como un número hexadecimal de 56 dígitos de longitud. En las versiones actuales de OpenSSL se acostumbra a nombrar las funciones de la familia SHA-2 indicando directamente el tamaño después de la palabra SHA, es decir, SHA2-224 se nombra como &amp;quot;sha-224&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-224 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 256 bits (32 bytes) que generalmente se representan como un número hexadecimal de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-256 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 384 bits (48 bytes) que generalmente se representan como un número hexadecimal de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 512 bits (64 bytes) que generalmente se representan como un número hexadecimal de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-512 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
La familia de funciones SHA-3 es el último miembro de la familia de estándares de Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto de los algoritmos SHA-2 si se descubre alguna vulnerabilidad en estos. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA-3 genera las mismas longitudes de resumen que SHA-2 (SHA3-224, SHA3-256, SHA3-384 y SHA3-512). En este caso usaremos como ejemplos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave privada o de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector de inicialización, en su caso).&lt;br /&gt;
&lt;br /&gt;
MUY IMPORTANTE: Cuando se cifra con contraseña, OpenSSL pasa esta contraseña, junto con 64 bits aleatorios de sal criptográfica, por un algoritmo de derivación de claves como el PBKDF1 (obsoleto) o el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;). Estos algoritmos utilizan funciones de resumen de forma recursiva para obtener suficientes bits para la clave de cifrado y para el vector de inicialización si es necesario. Esto permite que para una misma contraseña, se generen diferentes claves, al variar en cada caso la sal obtenida aleatoriamente. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos hemos expuesto comandos donde la contraseña aparece explícita y eso es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos. En situaciones de uso real, siempre hemos de intentar que la contraseña sea solicitada por el comando e introducida de forma no visible en pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password'' (aunque desaconsejamos esto)&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra y muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introducirá también el vector de inicialización (-iv IV) salvo que el algoritmo no lo use.&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave (recordemos que PKBDF1 está obsoleto).&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se manipulen ficheros cifrados, hay que saber cuál de las dos versiones se ha usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen ficheros antiguos cifrados con este sistema de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el &amp;quot;craqueo&amp;quot; de contraseñas por fuerza bruta sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits, que es la que utiliza OpenSSL.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha2 . El algoritmo predeterminado es sha2-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operación.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. El &amp;quot;padding&amp;quot; estándar en OpenSSL se describe en la especificación PKCS5. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y usualmente es tan largo como el tamaño de bloque (cifradores en bloque) o como el tamaño de la clave (cifradores en flujo). Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación de algoritmos de cifrado en bloque para cifrado en bloque====&lt;br /&gt;
&lt;br /&gt;
Los modos de operación más comunes son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque. Este problema se puede observar gráficamente si se cifra una imagen en colores sólidos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de algoritmos de cifrado en bloque para cifrado en flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo, ya que el cifrador de bloque se emplea para generar un &amp;quot;keystream&amp;quot; que será combinado con el texto claro bit a bit para producir el texto cifrado. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque con modo de operación de bloque===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más segura, como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este ejemplo cifraremos el fichero de ejemplo texto.txt con DES en modo ECB (recordemos lo peligroso que es este modo de operación ECB y NO LO USEMOS NUNCA EN LA VIDA REAL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 ya que utilizamos la opción &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación CBC, mucho más seguro que el ECB del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña &amp;quot;luna77&amp;quot; en la misma línea de comando (opción no recomendada):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WGQFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt) con dos claves DES. Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - CBC =====&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos un ejemplo de utilización del algoritmo des-ede-cbc para ilustrar el empleo de contraseñas y cómo se introduce automáticamente la sal en el fichero cifrado cuando se emplean contraseñas para el cifrado con cualquier tipo de algoritmo de cifrado y/o modo de operación.&lt;br /&gt;
&lt;br /&gt;
La sal 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica en el texto cifrado por un encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
En este ejemplo, cifraremos con una contraseña y luego usaremos la clave y el IV para el descifrado, eliminando los primeros 16 bytes del fichero cifrado antes de descifrarlo.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre en pantalla la sal, la clave y el vector de inicialización (opción -p):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-cbc -p -in texto.txt -out des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal, el fichero cifrado es binario (no se usó la opción -a) pero los primero ocho caracteres serán textuales, ya que es la cadena &amp;quot;Salted__&amp;quot; que indica que los ocho bits siguientes contienen la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para poder descifrar el fichero con la clave y el IV, primero hemos de &amp;quot;extraer&amp;quot; el texto &amp;quot;Salted__&amp;quot; y los ocho bits de sal (16 bytes en total) como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cbc_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Para verificar que se ha extraido correctamente la sal, se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cbc.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
Para descifrar, se hará uso de la clave y el IV obtenidos por pantalla en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cbc -d -in des_ede3_cbc_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== AES - 128 - CBC =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más utilizados es el RC4 (ya obsoleto), reemplazado en la actualidad por algoritmos más eficientes como el Chacha20 y los modos de operación en flujo (OFB o CFB) de los cifradores de bloque como TDES, AES, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo (nativos)===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se utilizó en algunos de los protocolos más populares como Secure Sockets Layer (SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) para añadir seguridad en las redes inalámbricas. En los últimos años, RC4 se ha excluido de los estándares de alta seguridad por sus debilidades. No está recomendado su uso en los nuevos sistemas y el estándar TLS de cifrado web y los protocolos WPA de cifrado en Wifi lo excluyen.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo RC4. Se tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2 &lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, ejecutamos el siguiente comando y posteriormente introducimos la misma contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' con Chacha20 usando esta vez la funcion ''-pass pass:password'' (desaconsejada).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque en modo de operación de flujo===&lt;br /&gt;
&lt;br /&gt;
Como ya hemos indicado, los modos de operación CFB, OFB y CTR transforman cifradores de bloque en cifradores de flujo, veamos un ejemplo con Triple DES y otro con AES&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior, aunque insistimos en que es mejor no poner esta opción y teclear la contraseña directamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
===== AES - 192 - CFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 192 bits para cifrar con modo CFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se va a cifrar el ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para descifrar se haría de la misma manera que en el paso 1, colocando la opción &amp;quot;-d&amp;quot; y permutando los valores de las opciones &amp;quot;-in&amp;quot; y &amp;quot;-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== AES - 256 - OFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 256 bits para cifrar con modo OFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Cifraremos el fichero ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la opción &amp;quot;-pbkdf2&amp;quot; para emplear la derivación de clave más potente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, podemos ejecutar el siguiente comando (que no tiene la opción -pass file:passwd.txt) y posteriormente introducimos la contraseña contenida en dicho fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso desarrollamos un ejemplo en el que el emisor (Alice) envia a Bob el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.aes), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con la clave pública RSA de Bob (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob) tendrán que haber intercambiado sus claves públicas (publicaAliceRSA.pem y publicaBobRSA.pem) y por supuesto, cada uno conserva su clave privada (privadaAliceRSA.pem y privadaBobRSA.pem).&lt;br /&gt;
&lt;br /&gt;
;Tarea de Alice (emisor)&lt;br /&gt;
&lt;br /&gt;
; texto.aes : Alice cifra con clave simétrica (AES-256-CBC) el fichero &amp;quot;texto.txt&amp;quot; con una contraseña y produce &amp;quot;texto.aes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.txt : Alice escribe la contraseña en el fichero &amp;quot;contraseña.txt&amp;quot;, veamos el contenido este fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif : Alice cifra de forma asimétrica el fichero contraseña.txt con la clave pública RSA de Bob (fichero publicaBobRSA.pem) y produce &amp;quot;contraseña.cif&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaBobRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa : Alice firma con su clave privada RSA (privadaAliceRSA.pem) el resumen generado con SHA2-256 del fichero texto.txt y genera el fichero &amp;quot;firmaDoc.rsa&amp;quot;. Lo más normal es que la clave privada de Alice esté cifrada y se le solicite la contraseña al ejecutar este comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadaAliceRSA.pem -out firmaDoc.rsa texto.aes &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, Alice envía a Bob los tres ficheros: texto.aes, contraseña.cif y firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
; Tarea de Bob (receptor)&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
Bob recibe el mensaje con los tres ficheros de Alice y procede a descifrar la contraseña enviada por Alice con su clave privada (privadaBob.pem). Si la clave privada de Bob estuviese cifrada (que es lo más normal), se le solicitará la contraseña que la protege.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoBobRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida contraseña.txt, Bob ya conoce la contraseña que se usó para cifrar texto.aes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
Una vez obtenida la contraseña de cifrado simétrica, Bob puede descifrar el &amp;quot;texto.aes&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.aes -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
Bob verifica que el resumen SHA-256 del texto descifrado (texto.txt) coincide con el resumen firmado en firmaDoc.rsa. Como Alice firmó el resumen (es decir, lo cifró mediante RSA con su propia clave privada), Bob usa la clave pública de Alice (publicaAliceRSA.pem) para descifrarlo. Si la comprobación es correcta, la transmisión ha tenido CONFIDENCIALIDAD (el texto viajó cifrado con una clave simétrica que viajaba cifrada con RSA) y además INTEGRIDAD (el texto descifrado coincide con el que calculó Alice y envió firmado, es decir, cifrado con su clave privada RSA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaAliceRSA.pem -signature firmaDoc.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: Sabemos que OpenSSL ofrece alternativas para casi todos los comandos. Bob podría realizar este último paso generando el resumen SHA256 del fichero texto.txt en un fichero texto.sha y utilizando el comando &amp;quot;openssl pkeyutl&amp;quot; de la misma forma que se indica en el paso 3 del ejemplo siguiente, con los cambios oportunos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del resumen de un fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en formato binario en el fichero de salida &amp;quot;resumen.sha&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.sha texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.sha&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.sha -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.sha -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados X.509 ==&lt;br /&gt;
&lt;br /&gt;
Un certificado X.509 autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=15</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=15"/>
		<updated>2020-03-25T00:03:35Z</updated>

		<summary type="html">&lt;p&gt;Editor1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones de resumen o funciones &amp;quot;hash&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones de resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que aceptan cualquier entrada y producen una salida consistente en una ristra de bits de tamaño fijo, que representa un &amp;quot;resumen&amp;quot; de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (mezcla fuerte, dificultad de encontrar colisiones, etc.) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre de la función de resumen utilizada.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;key&amp;quot; como clave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades (se considera &amp;quot;roto&amp;quot; actualmente), se debe conocer como funciona, ya que existe multitud de documentos que han usado este algoritmo a lo largo de los años.&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;En un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto.txt)= 4fa02d78a06b3833c190b464261d8c08&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como ejemplo de cómo varía un resumen ante mínimos cambios en el fichero de entrada, usaremos ahora un fichero &amp;quot;texto2.txt&amp;quot; idéntico, salvo la primera letra en minúsculas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;en un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto2.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto2.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto2.txt)= 5ed88c107e07da73dcfa03893bb8e822&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se observa que es absolutamente diferente del resumen anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
En este caso, demostraremos que cualquier función de resumen produce un &amp;quot;hash&amp;quot; de salida, aunque la entrada sea nula:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  echo &amp;quot;&amp;quot;| openssl dgst -md5 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(stdin)= 68b329da9893e34099c7d8ad5cb9c940&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de resumen que admite cualquier entrada y produce un resultado de 160 bits (20 bytes), que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática (ver la web http://shattered.io) evidenciando así la necesidad de sustituir el empleo de SHA-1 por funciones hash más robustas, como la familia SHA-2 que veremos en el apartado siguiente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA-1 del mismo fichero &amp;quot;texto.txt&amp;quot;, usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es una familia de funciones hash criptográficas, con diversos tamaños de salida en bits (SHA2-224, SHA2-256, SHA2-384 y SHA2-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 224 bits (28 bytes) que generalmente se representan como un número hexadecimal de 56 dígitos de longitud. En las versiones actuales de OpenSSL se acostumbra a nombrar las funciones de la familia SHA-2 indicando directamente el tamaño después de la palabra SHA, es decir, SHA2-224 se nombra como &amp;quot;sha-224&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-224 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 256 bits (32 bytes) que generalmente se representan como un número hexadecimal de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-256 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 384 bits (48 bytes) que generalmente se representan como un número hexadecimal de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 512 bits (64 bytes) que generalmente se representan como un número hexadecimal de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-512 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
La familia de funciones SHA-3 es el último miembro de la familia de estándares de Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto de los algoritmos SHA-2 si se descubre alguna vulnerabilidad en estos. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA-3 genera las mismas longitudes de resumen que SHA-2 (SHA3-224, SHA3-256, SHA3-384 y SHA3-512). En este caso usaremos como ejemplos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave privada o de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector de inicialización, en su caso).&lt;br /&gt;
&lt;br /&gt;
MUY IMPORTANTE: Cuando se cifra con contraseña, OpenSSL pasa esta contraseña, junto con 64 bits aleatorios de sal criptográfica, por un algoritmo de derivación de claves como el PBKDF1 (obsoleto) o el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;). Estos algoritmos utilizan funciones de resumen de forma recursiva para obtener suficientes bits para la clave de cifrado y para el vector de inicialización si es necesario. Esto permite que para una misma contraseña, se generen diferentes claves, al variar en cada caso la sal obtenida aleatoriamente. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos hemos expuesto comandos donde la contraseña aparece explícita y eso es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos. En situaciones de uso real, siempre hemos de intentar que la contraseña sea solicitada por el comando e introducida de forma no visible en pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password'' (aunque desaconsejamos esto)&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra y muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introducirá también el vector de inicialización (-iv IV) salvo que el algoritmo no lo use.&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave (recordemos que PKBDF1 está obsoleto).&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se manipulen ficheros cifrados, hay que saber cuál de las dos versiones se ha usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen ficheros antiguos cifrados con este sistema de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el &amp;quot;craqueo&amp;quot; de contraseñas por fuerza bruta sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits, que es la que utiliza OpenSSL.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha2 . El algoritmo predeterminado es sha2-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operación.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. El &amp;quot;padding&amp;quot; estándar en OpenSSL se describe en la especificación PKCS5. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y usualmente es tan largo como el tamaño de bloque (cifradores en bloque) o como el tamaño de la clave (cifradores en flujo). Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación de algoritmos de cifrado en bloque para cifrado en bloque====&lt;br /&gt;
&lt;br /&gt;
Los modos de operación más comunes son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque. Este problema se puede observar gráficamente si se cifra una imagen en colores sólidos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de algoritmos de cifrado en bloque para cifrado en flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo, ya que el cifrador de bloque se emplea para generar un &amp;quot;keystream&amp;quot; que será combinado con el texto claro bit a bit para producir el texto cifrado. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque con modo de operación de bloque===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más segura, como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este ejemplo cifraremos el fichero de ejemplo texto.txt con DES en modo ECB (recordemos lo peligroso que es este modo de operación ECB y NO LO USEMOS NUNCA EN LA VIDA REAL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 ya que utilizamos la opción &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación CBC, mucho más seguro que el ECB del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña &amp;quot;luna77&amp;quot; en la misma línea de comando (opción no recomendada):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WGQFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt) con dos claves DES. Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - CBC =====&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos un ejemplo de utilización del algoritmo des-ede-cbc para ilustrar el empleo de contraseñas y cómo se introduce automáticamente la sal en el fichero cifrado cuando se emplean contraseñas para el cifrado con cualquier tipo de algoritmo de cifrado y/o modo de operación.&lt;br /&gt;
&lt;br /&gt;
La sal 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica en el texto cifrado por un encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
En este ejemplo, cifraremos con una contraseña y luego usaremos la clave y el IV para el descifrado, eliminando los primeros 16 bytes del fichero cifrado antes de descifrarlo.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre en pantalla la sal, la clave y el vector de inicialización (opción -p):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-cbc -p -in texto.txt -out des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal, el fichero cifrado es binario (no se usó la opción -a) pero los primero ocho caracteres serán textuales, ya que es la cadena &amp;quot;Salted__&amp;quot; que indica que los ocho bits siguientes contienen la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para poder descifrar el fichero con la clave y el IV, primero hemos de &amp;quot;extraer&amp;quot; el texto &amp;quot;Salted__&amp;quot; y los ocho bits de sal (16 bytes en total) como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cbc_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Para verificar que se ha extraido correctamente la sal, se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cbc.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
Para descifrar, se hará uso de la clave y el IV obtenidos por pantalla en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cbc -d -in des_ede3_cbc_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== AES - 128 - CBC =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más utilizados es el RC4 (ya obsoleto), reemplazado en la actualidad por algoritmos más eficientes como el Chacha20 y los modos de operación en flujo (OFB o CFB) de los cifradores de bloque como TDES, AES, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo (nativos)===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se utilizó en algunos de los protocolos más populares como Secure Sockets Layer (SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) para añadir seguridad en las redes inalámbricas. En los últimos años, RC4 se ha excluido de los estándares de alta seguridad por sus debilidades. No está recomendado su uso en los nuevos sistemas y el estándar TLS de cifrado web y los protocolos WPA de cifrado en Wifi lo excluyen.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo RC4. Se tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2 &lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, ejecutamos el siguiente comando y posteriormente introducimos la misma contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' con Chacha20 usando esta vez la funcion ''-pass pass:password'' (desaconsejada).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque en modo de operación de flujo===&lt;br /&gt;
&lt;br /&gt;
Como ya hemos indicado, los modos de operación CFB, OFB y CTR transforman cifradores de bloque en cifradores de flujo, veamos un ejemplo con Triple DES y otro con AES&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior, aunque insistimos en que es mejor no poner esta opción y teclear la contraseña directamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
===== AES - 192 - CFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 192 bits para cifrar con modo CFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se va a cifrar el ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para descifrar se haría de la misma manera que en el paso 1, colocando la opción &amp;quot;-d&amp;quot; y permutando los valores de las opciones &amp;quot;-in&amp;quot; y &amp;quot;-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== AES - 256 - OFB =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 256 bits para cifrar con modo OFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Cifraremos el fichero ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la opción &amp;quot;-pbkdf2&amp;quot; para emplear la derivación de clave más potente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, podemos ejecutar el siguiente comando (que no tiene la opción -pass file:passwd.txt) y posteriormente introducimos la contraseña contenida en dicho fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso se realizará un ejemplo en el que el emisor (Alice) enviará el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.cif), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con nuestra clave pública RSA (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob, nosotros en este caso) tendrán que haberse intercambiado las claves públicas.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Recibimos el mensaje de Alice y procedemos a descifrar la contraseña enviada por Alice con nuestra clave privada.Si nuestra clave privada está protegida, se nos solicitará la contraseña que la protege y que indicamos al crear la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Una vez obtenida la contraseña, se puede descifrar el &amp;quot;texto.cif&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.cif -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Verificar que el texto cifrado se ha firmado correctamente. Como se firmó con su clave privada, usaremos su clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Nota:'''PARA REALIZAR ESTE EJEMPLO SUPONEMOS QUE ALICE REALIZÓ PREVIAMENTE LAS SIGUIENTES OPERACIONES:&lt;br /&gt;
&lt;br /&gt;
; texto.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al realizar un &amp;quot;cat&amp;quot; del fichero &amp;quot;contraseña.txt&amp;quot; se observa la contraseña con la que Alice cifró el texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados ==&lt;br /&gt;
&lt;br /&gt;
Un certificado autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=14</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=14"/>
		<updated>2020-03-24T23:45:24Z</updated>

		<summary type="html">&lt;p&gt;Editor1: reordenación de las opciones de cifrado en bloque, bloque-flujo y flujo y mejoras varias&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones de resumen o funciones &amp;quot;hash&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones de resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que aceptan cualquier entrada y producen una salida consistente en una ristra de bits de tamaño fijo, que representa un &amp;quot;resumen&amp;quot; de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (mezcla fuerte, dificultad de encontrar colisiones, etc.) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre de la función de resumen utilizada.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;key&amp;quot; como clave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades (se considera &amp;quot;roto&amp;quot; actualmente), se debe conocer como funciona, ya que existe multitud de documentos que han usado este algoritmo a lo largo de los años.&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;En un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto.txt)= 4fa02d78a06b3833c190b464261d8c08&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como ejemplo de cómo varía un resumen ante mínimos cambios en el fichero de entrada, usaremos ahora un fichero &amp;quot;texto2.txt&amp;quot; idéntico, salvo la primera letra en minúsculas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;en un lugar de la Mancha de cuyo nombre no quiero acordarme...&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Se calcula el resumen MD5 del fichero &amp;quot;texto2.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto2.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MD5(texto2.txt)= 5ed88c107e07da73dcfa03893bb8e822&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se observa que es absolutamente diferente del resumen anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
En este caso, demostraremos que cualquier función de resumen produce un &amp;quot;hash&amp;quot; de salida, aunque la entrada sea nula:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  echo &amp;quot;&amp;quot;| openssl dgst -md5 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(stdin)= 68b329da9893e34099c7d8ad5cb9c940&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de resumen que admite cualquier entrada y produce un resultado de 160 bits (20 bytes), que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática (ver la web http://shattered.io) evidenciando así la necesidad de sustituir el empleo de SHA-1 por funciones hash más robustas, como la familia SHA-2 que veremos en el apartado siguiente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA-1 del mismo fichero &amp;quot;texto.txt&amp;quot;, usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es una familia de funciones hash criptográficas, con diversos tamaños de salida en bits (SHA2-224, SHA2-256, SHA2-384 y SHA2-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 224 bits (28 bytes) que generalmente se representan como un número hexadecimal de 56 dígitos de longitud. En las versiones actuales de OpenSSL se acostumbra a nombrar las funciones de la familia SHA-2 indicando directamente el tamaño después de la palabra SHA, es decir, SHA2-224 se nombra como &amp;quot;sha-224&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-224 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 256 bits (32 bytes) que generalmente se representan como un número hexadecimal de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-256 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 384 bits (48 bytes) que generalmente se representan como un número hexadecimal de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce resúmenes de 512 bits (64 bytes) que generalmente se representan como un número hexadecimal de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA2-512 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
La familia de funciones SHA-3 es el último miembro de la familia de estándares de Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto de los algoritmos SHA-2 si se descubre alguna vulnerabilidad en estos. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA-3 genera las mismas longitudes de resumen que SHA-2 (SHA3-224, SHA3-256, SHA3-384 y SHA3-512). En este caso usaremos como ejemplos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se realizará un resumen SHA3-384 del mismo fichero &amp;quot;texto.txt&amp;quot; usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave privada o de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector de inicialización, en su caso).&lt;br /&gt;
&lt;br /&gt;
MUY IMPORTANTE: Cuando se cifra con contraseña, OpenSSL pasa esta contraseña, junto con 64 bits aleatorios de sal criptográfica, por un algoritmo de derivación de claves como el PBKDF1 (obsoleto) o el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;). Estos algoritmos utilizan funciones de resumen de forma recursiva para obtener suficientes bits para la clave de cifrado y para el vector de inicialización si es necesario. Esto permite que para una misma contraseña, se generen diferentes claves, al variar en cada caso la sal obtenida aleatoriamente. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos hemos expuesto comandos donde la contraseña aparece explícita y eso es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos. En situaciones de uso real, siempre hemos de intentar que la contraseña sea solicitada por el comando e introducida de forma no visible en pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password'' (aunque desaconsejamos esto)&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra y muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente muestra en pantalla la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introducirá también el vector de inicialización (-iv IV) salvo que el algoritmo no lo use.&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave (recordemos que PKBDF1 está obsoleto).&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se manipulen ficheros cifrados, hay que saber cuál de las dos versiones se ha usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen ficheros antiguos cifrados con este sistema de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el &amp;quot;craqueo&amp;quot; de contraseñas por fuerza bruta sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits, que es la que utiliza OpenSSL.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha2 . El algoritmo predeterminado es sha2-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operación.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y usualmente es tan largo como el tamaño de bloque (cifradores en bloque) o como el tamaño de la clave (cifradores en flujo). Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación de algoritmos de cifrado en bloque para cifrado en bloque====&lt;br /&gt;
&lt;br /&gt;
Los métodos que usaremos son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de algoritmos de cifrado en bloque para cifrado en flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo, ya que el cifrador de bloque se emplea para generar un &amp;quot;keystream&amp;quot; que será combinado con el texto claro bit a bit para producir el texto cifrado. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más utilizados es el RC4 (ya obsoleto), reemplazado en la actualidad por algoritmos más eficientes como el Chacha20 y los modos de operación en flujo (OFB o CFB) de los cifradores de bloque como TDES, AES, etc. &lt;br /&gt;
&lt;br /&gt;
===Ejemplos de algoritmos de cifrado en bloque con modo de operación de bloque===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más segura, como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este ejemplo cifraremos el fichero de ejemplo texto.txt con DES en modo ECB (recordemos lo peligroso que es este modo de operación ECB y NO LO USEMOS NUNCA EN LA VIDA REAL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 ya que utilizamos la opción &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación CBC, mucho más seguro que el ECB del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña &amp;quot;luna77&amp;quot; en la misma línea de comando (opción no recomendada):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WGQFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt) con dos claves DES. Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - CBC =====&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos un ejemplo de utilización del algoritmo des-ede-cbc para ilustrar el empleo de contraseñas y cómo se introduce automáticamente la sal en el fichero cifrado cuando se emplean contraseñas para el cifrado con cualquier tipo de algoritmo de cifrado y/o modo de operación.&lt;br /&gt;
&lt;br /&gt;
La sal 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica en el texto cifrado por un encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
En este ejemplo, cifraremos con una contraseña y luego usaremos la clave y el IV para el descifrado, eliminando los primeros 16 bytes del fichero cifrado antes de descifrarlo.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre en pantalla la sal, la clave y el vector de inicialización (opción -p):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-cbc -p -in texto.txt -out des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal, el fichero cifrado es binario (no se usó la opción -a) pero los primero ocho caracteres serán textuales, ya que es la cadena &amp;quot;Salted__&amp;quot; que indica que los ocho bits siguientes contienen la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para poder descifrar el fichero con la clave y el IV, primero hemos de &amp;quot;extraer&amp;quot; el texto &amp;quot;Salted__&amp;quot; y los ocho bits de sal (16 bytes en total) como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cbc_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Para verificar que se ha extraido correctamente la sal, se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des_ede3_cbc_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cbc.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
Para descifrar, se hará uso de la clave y el IV obtenidos por pantalla en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cbc -d -in des_ede3_cbc_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== aes - 128 - cbc =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 192 - cfb =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para descifrar se haría de la misma manera que en el paso 1, colocando la opción &amp;quot;-d&amp;quot; y permutando los valores de las opciones &amp;quot;-in&amp;quot; y &amp;quot;-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo (nativos)===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se utilizó en algunos de los protocolos más populares como Secure Sockets Layer (SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) para añadir seguridad en las redes inalámbricas. En los últimos años, RC4 se ha excluido de los estándares de alta seguridad por sus debilidades. No está recomendado su uso en los nuevos sistemas y el estándar TLS de cifrado web y los protocolos WPA de cifrado en Wifi lo excluyen.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo RC4. Se tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2 &lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, ejecutamos el siguiente comando y posteriormente introducimos la misma contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' con Chacha20 usando esta vez la funcion ''-pass pass:password'' (desaconsejada).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
====Algoritmos de cifrado en bloque en modo de operación de flujo===&lt;br /&gt;
&lt;br /&gt;
Como ya hemos indicado, los modos de operación CFB, OFB y CTR transforman cifradores de bloque en cifradores de flujo, veamos un ejemplo con Triple DES y otro con AES&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior, aunque insistimos en que es mejor no poner esta opción y teclear la contraseña directamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
===== aes - 256 - ofb =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos AES de 256 bits para cifrar con modo OFB, lo que resultará en un cifrado de flujo. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
Cifraremos el fichero ''texto.txt'' usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la opción &amp;quot;-pbkdf2&amp;quot; para emplear la derivación de clave más potente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
Para descifrar, podemos ejecutar el siguiente comando (que no tiene la opción -pass file:passwd.txt) y posteriormente introducimos la contraseña contenida en dicho fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso se realizará un ejemplo en el que el emisor (Alice) enviará el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.cif), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con nuestra clave pública RSA (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob, nosotros en este caso) tendrán que haberse intercambiado las claves públicas.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Recibimos el mensaje de Alice y procedemos a descifrar la contraseña enviada por Alice con nuestra clave privada.Si nuestra clave privada está protegida, se nos solicitará la contraseña que la protege y que indicamos al crear la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Una vez obtenida la contraseña, se puede descifrar el &amp;quot;texto.cif&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.cif -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Verificar que el texto cifrado se ha firmado correctamente. Como se firmó con su clave privada, usaremos su clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Nota:'''PARA REALIZAR ESTE EJEMPLO SUPONEMOS QUE ALICE REALIZÓ PREVIAMENTE LAS SIGUIENTES OPERACIONES:&lt;br /&gt;
&lt;br /&gt;
; texto.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al realizar un &amp;quot;cat&amp;quot; del fichero &amp;quot;contraseña.txt&amp;quot; se observa la contraseña con la que Alice cifró el texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados ==&lt;br /&gt;
&lt;br /&gt;
Un certificado autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=13</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=13"/>
		<updated>2020-03-24T20:44:56Z</updated>

		<summary type="html">&lt;p&gt;Editor1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
 b.1) en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 b.2) en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones hash ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que cifran una entrada y la comprimen a una salida de menor longitud y son fáciles de calcular. Generan una salida consistente en una ristra de bits de tamaño fijo, específica para cada algoritmo que representa un resumen de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (integridad y autenticidad) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del resumen utilizado.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;clave&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades, se debe conocer como funciona, ya que existen antiguos documentos que han usado este algoritmo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Se realizará el resumen del &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MD5(texto.txt)= 1f669a0de621e1beb87baa527f6f1235&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de troceo que toma una entrada y produce un valor de hash de 160 bits (20 bytes) conocido como un resumen del mensaje , que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA-384, SHA-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática y evidenciando así la necesidad de elaborar una función hash más fuerte. Aunque el SHA-2 se comporta de forma parecida al algoritmo SHA-1, estos ataques no han sido extendidos satisfactoriamente a SHA-2. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 224 bits (28 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 56 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 256 bits (32 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 384 bits (48 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 512 bits (64 bytes) conocido como un resumen de mensaje, que generalmente se representa como un número hexadecimal , de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
SHA-3 ( Secure Hash Algorithm 3 ) es el último miembro de la familia de estándares de Secure Hash Algorithm , publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto del SHA-2 si se descubre alguna vulnerabilidad en éste último. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genera diferentes longitudes de resumen como SHA-2. En este caso usaremos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como prueba, se procederá a modificar el &amp;quot;texto.txt&amp;quot; solamente borrando una letra. Se observará que el resultado será totalmente diferente al anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA3-384(texto.txt)= 51e8b14f1c0eaae57d83445eb41d42ef730340d1880d30fb81a8660a12559c3072880d855273996aca33d75f006595a6&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Como conclusión''': para un mismo texto plano, dará un resultado diferente si la contraseña también es diferente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector).&lt;br /&gt;
&lt;br /&gt;
También destacar que, cuando una contraseña  se emplea como clave de cifrado, un sistema bien diseñado la pasa primero por un algoritmo de derivación de claves como el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;)&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Clave (criptografía) [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de diciembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Clave_(criptograf%C3%ADa)&amp;amp;oldid=107769781&amp;gt;.&amp;lt;/ref&amp;gt;. Asimismo, se agrega al hash  que usa la función de derivación unos dígitos aleatorios al que llamamos sal. Esto permite que para una misma contraseña, se generen distintas claves. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos se usan comandos donde la contraseña aparece explícita y es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password''.&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra e imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introduce el vector de inicialización (-iv IV).&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se mande un documento cifrado, hay que saber cuál de las dos versiones se han usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen documentos antiguos cifrados con ella.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el craqueo de contraseñas sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha1 . El algoritmo predeterminado es sha-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operaciones.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y a menudo es tan largo como el tamaño de bloque o como el tamaño de la clave. Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación para Cifrado en Bloque====&lt;br /&gt;
&lt;br /&gt;
Los métodos que usaremos son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de cifradores en bloque para Cifrado en Flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más importantes es el RC4, aunque existen nuevos algoritmos de cifrado más eficientes como el Chacha20 y los modos de operación en flujo de cifradores de bloque como AES. &lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más seguro como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Una manera de cifrar un fichero es ejecutando el comando que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 utilizando la función &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1&lt;br /&gt;
HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña en la misma línea de comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WG&lt;br /&gt;
QFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt). Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
===== DES - EDE3 - CFB =====&lt;br /&gt;
&lt;br /&gt;
El 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. &lt;br /&gt;
&lt;br /&gt;
La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Si solo se usa la clave y el IV directamente, no es necesario especificar el '''salt''' y por tanto, no se usará dicho encabezado de 16 bytes. Como conclusión, si se cifra con una contraseña y luego se  usa la clave y el IV para el descifrado, se deberá quitar los primeros 16 bytes antes de descifrarlos correspondientes con el encabezado y la sal.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre la sal, la clave y el vector de inicialización:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-cfb -p -in texto.txt -out des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros. Pero en este ejemplo usaremos tanto la clave (key) como el vector de inicialización (IV) para el descifrado.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Al usar la clave y la sal para descifrar el fichero, se tiene que primero extraer la sal como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat des_ede3_cfb.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cfb_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat des_ede3_cfb_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cfb.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
&lt;br /&gt;
Para descifrar, se hará uso de la clave y la sal obtenida en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cfb -d -in des_ede3_cfb_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== aes - 128 - cbc =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 192 - cfb =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se haría de la misma manera que en DES - EDE3 - CFB añadiendo los comandos nuevos &amp;quot;-pbkdf2&amp;quot; y &amp;quot;-md sha1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 256 - ofb =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos la misma función que antes para introducir la contraseña desde un archivo pero a la hora de descifrar tendremos que introducir la contraseña a mano. De esta forma, se podrá verificar que la contraseña del archivo equivale a ponerla manualmente y con el mismo resultado. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la función &amp;quot;-pbkdf2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que contiene el fichero que se utilizó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo ===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se usa en algunos de los protocolos más populares como Transport Layer Security (TLS/SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) (para añadir seguridad en las redes inalámbricas). RC4 fue excluido enseguida de los estándares de alta seguridad por los criptógrafos y algunos modos de usar el algoritmo de criptografía RC4 lo han llevado a ser un sistema de criptografía muy inseguro, incluyendo su uso WEP. No está recomendado su uso en los nuevos sistemas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. RC4 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=RC4&amp;amp;oldid=104650982&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo. Tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2&lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3)openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' igual que antes pero usando la funcion ''-pass pass:password''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso se realizará un ejemplo en el que el emisor (Alice) enviará el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.cif), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con nuestra clave pública RSA (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob, nosotros en este caso) tendrán que haberse intercambiado las claves públicas.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Recibimos el mensaje de Alice y procedemos a descifrar la contraseña enviada por Alice con nuestra clave privada.Si nuestra clave privada está protegida, se nos solicitará la contraseña que la protege y que indicamos al crear la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Una vez obtenida la contraseña, se puede descifrar el &amp;quot;texto.cif&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.cif -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Verificar que el texto cifrado se ha firmado correctamente. Como se firmó con su clave privada, usaremos su clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Nota:'''PARA REALIZAR ESTE EJEMPLO SUPONEMOS QUE ALICE REALIZÓ PREVIAMENTE LAS SIGUIENTES OPERACIONES:&lt;br /&gt;
&lt;br /&gt;
; texto.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al realizar un &amp;quot;cat&amp;quot; del fichero &amp;quot;contraseña.txt&amp;quot; se observa la contraseña con la que Alice cifró el texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados ==&lt;br /&gt;
&lt;br /&gt;
Un certificado autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=12</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=12"/>
		<updated>2020-03-24T20:41:59Z</updated>

		<summary type="html">&lt;p&gt;Editor1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Antes de empezar:&lt;br /&gt;
Tenemos que estar seguros de que el sistema está actualizado y que tiene instalado el compilador gcc y sus librerías, la utilidad &amp;quot;make&amp;quot;, librerías de desarrollo,etc.&lt;br /&gt;
&lt;br /&gt;
En Centos:&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum update -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum group install 'Development Tools' &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; sudo yum install perl-core zlib-devel -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En Ubuntu:&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; sudo apt install build-essential checkinstall zlib1g-dev -y &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
Accedemos al directorio de los fuentes de OpenSSL:&lt;br /&gt;
&amp;lt;code&amp;gt; cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
Configuramos el directorio de destino:&lt;br /&gt;
&amp;lt;code&amp;gt; sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
Compilamos, probamos e instalamos:&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
Empieza la compilación de todas las fuentes... tarda varios minutos&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
Se ejecutan los tests de binarios y librerias ... tarda varios minutos&lt;br /&gt;
Y si todo ha ido bien...&lt;br /&gt;
&amp;lt;code&amp;gt; sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
Se instalan los binarios y las librerías bajo el directorio /usr/local/ssl&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf con &amp;quot;/usr/local/ssl/lib&amp;quot; como contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;/usr/local/ssl/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El siguiente comando fuerza la recarga de las librerías y con ella se activa la nuestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
 b.1) en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 b.2) en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones hash ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que cifran una entrada y la comprimen a una salida de menor longitud y son fáciles de calcular. Generan una salida consistente en una ristra de bits de tamaño fijo, específica para cada algoritmo que representa un resumen de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (integridad y autenticidad) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del resumen utilizado.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;clave&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades, se debe conocer como funciona, ya que existen antiguos documentos que han usado este algoritmo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Se realizará el resumen del &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MD5(texto.txt)= 1f669a0de621e1beb87baa527f6f1235&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de troceo que toma una entrada y produce un valor de hash de 160 bits (20 bytes) conocido como un resumen del mensaje , que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA-384, SHA-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática y evidenciando así la necesidad de elaborar una función hash más fuerte. Aunque el SHA-2 se comporta de forma parecida al algoritmo SHA-1, estos ataques no han sido extendidos satisfactoriamente a SHA-2. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 224 bits (28 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 56 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 256 bits (32 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 384 bits (48 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 512 bits (64 bytes) conocido como un resumen de mensaje, que generalmente se representa como un número hexadecimal , de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
SHA-3 ( Secure Hash Algorithm 3 ) es el último miembro de la familia de estándares de Secure Hash Algorithm , publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto del SHA-2 si se descubre alguna vulnerabilidad en éste último. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genera diferentes longitudes de resumen como SHA-2. En este caso usaremos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como prueba, se procederá a modificar el &amp;quot;texto.txt&amp;quot; solamente borrando una letra. Se observará que el resultado será totalmente diferente al anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA3-384(texto.txt)= 51e8b14f1c0eaae57d83445eb41d42ef730340d1880d30fb81a8660a12559c3072880d855273996aca33d75f006595a6&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Como conclusión''': para un mismo texto plano, dará un resultado diferente si la contraseña también es diferente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector).&lt;br /&gt;
&lt;br /&gt;
También destacar que, cuando una contraseña  se emplea como clave de cifrado, un sistema bien diseñado la pasa primero por un algoritmo de derivación de claves como el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;)&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Clave (criptografía) [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de diciembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Clave_(criptograf%C3%ADa)&amp;amp;oldid=107769781&amp;gt;.&amp;lt;/ref&amp;gt;. Asimismo, se agrega al hash  que usa la función de derivación unos dígitos aleatorios al que llamamos sal. Esto permite que para una misma contraseña, se generen distintas claves. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos se usan comandos donde la contraseña aparece explícita y es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password''.&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra e imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introduce el vector de inicialización (-iv IV).&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se mande un documento cifrado, hay que saber cuál de las dos versiones se han usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen documentos antiguos cifrados con ella.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el craqueo de contraseñas sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha1 . El algoritmo predeterminado es sha-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operaciones.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y a menudo es tan largo como el tamaño de bloque o como el tamaño de la clave. Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación para Cifrado en Bloque====&lt;br /&gt;
&lt;br /&gt;
Los métodos que usaremos son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de cifradores en bloque para Cifrado en Flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más importantes es el RC4, aunque existen nuevos algoritmos de cifrado más eficientes como el Chacha20 y los modos de operación en flujo de cifradores de bloque como AES. &lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más seguro como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Una manera de cifrar un fichero es ejecutando el comando que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 utilizando la función &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1&lt;br /&gt;
HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña en la misma línea de comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WG&lt;br /&gt;
QFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt). Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
===== DES - EDE3 - CFB =====&lt;br /&gt;
&lt;br /&gt;
El 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. &lt;br /&gt;
&lt;br /&gt;
La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Si solo se usa la clave y el IV directamente, no es necesario especificar el '''salt''' y por tanto, no se usará dicho encabezado de 16 bytes. Como conclusión, si se cifra con una contraseña y luego se  usa la clave y el IV para el descifrado, se deberá quitar los primeros 16 bytes antes de descifrarlos correspondientes con el encabezado y la sal.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre la sal, la clave y el vector de inicialización:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-cfb -p -in texto.txt -out des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros. Pero en este ejemplo usaremos tanto la clave (key) como el vector de inicialización (IV) para el descifrado.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Al usar la clave y la sal para descifrar el fichero, se tiene que primero extraer la sal como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat des_ede3_cfb.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cfb_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat des_ede3_cfb_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cfb.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
&lt;br /&gt;
Para descifrar, se hará uso de la clave y la sal obtenida en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cfb -d -in des_ede3_cfb_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== aes - 128 - cbc =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 192 - cfb =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se haría de la misma manera que en DES - EDE3 - CFB añadiendo los comandos nuevos &amp;quot;-pbkdf2&amp;quot; y &amp;quot;-md sha1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 256 - ofb =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos la misma función que antes para introducir la contraseña desde un archivo pero a la hora de descifrar tendremos que introducir la contraseña a mano. De esta forma, se podrá verificar que la contraseña del archivo equivale a ponerla manualmente y con el mismo resultado. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la función &amp;quot;-pbkdf2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que contiene el fichero que se utilizó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo ===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se usa en algunos de los protocolos más populares como Transport Layer Security (TLS/SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) (para añadir seguridad en las redes inalámbricas). RC4 fue excluido enseguida de los estándares de alta seguridad por los criptógrafos y algunos modos de usar el algoritmo de criptografía RC4 lo han llevado a ser un sistema de criptografía muy inseguro, incluyendo su uso WEP. No está recomendado su uso en los nuevos sistemas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. RC4 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=RC4&amp;amp;oldid=104650982&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo. Tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2&lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3)openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' igual que antes pero usando la funcion ''-pass pass:password''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso se realizará un ejemplo en el que el emisor (Alice) enviará el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.cif), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con nuestra clave pública RSA (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob, nosotros en este caso) tendrán que haberse intercambiado las claves públicas.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Recibimos el mensaje de Alice y procedemos a descifrar la contraseña enviada por Alice con nuestra clave privada.Si nuestra clave privada está protegida, se nos solicitará la contraseña que la protege y que indicamos al crear la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Una vez obtenida la contraseña, se puede descifrar el &amp;quot;texto.cif&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.cif -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Verificar que el texto cifrado se ha firmado correctamente. Como se firmó con su clave privada, usaremos su clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Nota:'''PARA REALIZAR ESTE EJEMPLO SUPONEMOS QUE ALICE REALIZÓ PREVIAMENTE LAS SIGUIENTES OPERACIONES:&lt;br /&gt;
&lt;br /&gt;
; texto.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al realizar un &amp;quot;cat&amp;quot; del fichero &amp;quot;contraseña.txt&amp;quot; se observa la contraseña con la que Alice cifró el texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados ==&lt;br /&gt;
&lt;br /&gt;
Un certificado autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=11</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=11"/>
		<updated>2020-03-24T20:14:27Z</updated>

		<summary type="html">&lt;p&gt;Editor1: unificación de la instalación en CentOS y Ubuntu (corregir)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''Muchas distribuciones de CentOS y Ubuntu ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la ya instalada en el sistema, que seguirá igual que antes de la instalación. Es decir, después de estas operaciones, el sistema seguirá utilizando las librerías OpenSSL de la versión antigua en todas sus aplicaciones (httpd, etc.) pero los usuarios dispondrán de&lt;br /&gt;
los comandos &amp;quot;openssl&amp;quot; y &amp;quot;c_rehash&amp;quot; de la nueva versión.&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Averiguar cuál es y descargar la última versión de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
Para averiguar cuál es la última versión de OpenSSL hay que acceder a https://www.openssl.org/source y apuntar el nombre del fichero en la primera línea de la tabla de descargas&lt;br /&gt;
&lt;br /&gt;
A fecha de la última actualización de esta Wiki la versión disponible es la openssl-1.1.1e.tar.gz y esta es la que usaremos en este ejemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 1) cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) tar xvf openssl-1.1.1e.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cd openssl-1.1.1e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 6) sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 7) sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Y si todo ha ido bien... &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 8) sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1X.conf, ejemplo con vi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 9) sudo vi /etc/ld.so.conf.d/openssl-1.1.1e.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Pulsamos &amp;quot;a&amp;quot; y añadimos la linea siguiente: &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; /usr/local/ssl/lib &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; pulsamos tecla de escape y ZZ y se sale del editor vi, guardando el fichero /etc/ld.so.conf.d/openssl-1.1.1e.conf y ejecutamos:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 10) sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Añadir /usr/local/ssl/bin al principio de la variable de entorno PATH, esto hará que el comando openssl se busque antes en el directorio de nuestra instalación que en el ya existente (típicamente /usr/bin). Esto se puede hacer para nuestro usuario o para todos los usuarios:&lt;br /&gt;
&lt;br /&gt;
a) Para todos los usuarios del sistema: la manera más sencilla tanto en CentOS como en Ubuntu es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; 11a) sudo echo &amp;quot;PATH=/usr/local/ssl:\$PATH&amp;quot; &amp;gt;&amp;gt; /etc/profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Sólo para nuestro usuario, en este caso será distinto si tenemos CentOS o Ubuntu ya que el primero típicamente usa ~/.bash_profile y el segundo ~/.profile&lt;br /&gt;
&lt;br /&gt;
 b.1) en Centos :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 11b1) sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH ; export PATH&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 b.2) en Ubuntu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 11b2) sudo echo &amp;quot;PATH=/usr/local/ssl/bin:\$PATH&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 13) openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y debe aparecer la versión instalada.&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones hash ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que cifran una entrada y la comprimen a una salida de menor longitud y son fáciles de calcular. Generan una salida consistente en una ristra de bits de tamaño fijo, específica para cada algoritmo que representa un resumen de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (integridad y autenticidad) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del resumen utilizado.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;clave&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades, se debe conocer como funciona, ya que existen antiguos documentos que han usado este algoritmo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Se realizará el resumen del &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MD5(texto.txt)= 1f669a0de621e1beb87baa527f6f1235&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de troceo que toma una entrada y produce un valor de hash de 160 bits (20 bytes) conocido como un resumen del mensaje , que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA-384, SHA-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática y evidenciando así la necesidad de elaborar una función hash más fuerte. Aunque el SHA-2 se comporta de forma parecida al algoritmo SHA-1, estos ataques no han sido extendidos satisfactoriamente a SHA-2. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 224 bits (28 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 56 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 256 bits (32 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 384 bits (48 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 512 bits (64 bytes) conocido como un resumen de mensaje, que generalmente se representa como un número hexadecimal , de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
SHA-3 ( Secure Hash Algorithm 3 ) es el último miembro de la familia de estándares de Secure Hash Algorithm , publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto del SHA-2 si se descubre alguna vulnerabilidad en éste último. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genera diferentes longitudes de resumen como SHA-2. En este caso usaremos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como prueba, se procederá a modificar el &amp;quot;texto.txt&amp;quot; solamente borrando una letra. Se observará que el resultado será totalmente diferente al anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA3-384(texto.txt)= 51e8b14f1c0eaae57d83445eb41d42ef730340d1880d30fb81a8660a12559c3072880d855273996aca33d75f006595a6&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Como conclusión''': para un mismo texto plano, dará un resultado diferente si la contraseña también es diferente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector).&lt;br /&gt;
&lt;br /&gt;
También destacar que, cuando una contraseña  se emplea como clave de cifrado, un sistema bien diseñado la pasa primero por un algoritmo de derivación de claves como el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;)&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Clave (criptografía) [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de diciembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Clave_(criptograf%C3%ADa)&amp;amp;oldid=107769781&amp;gt;.&amp;lt;/ref&amp;gt;. Asimismo, se agrega al hash  que usa la función de derivación unos dígitos aleatorios al que llamamos sal. Esto permite que para una misma contraseña, se generen distintas claves. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos se usan comandos donde la contraseña aparece explícita y es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password''.&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra e imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introduce el vector de inicialización (-iv IV).&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se mande un documento cifrado, hay que saber cuál de las dos versiones se han usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen documentos antiguos cifrados con ella.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el craqueo de contraseñas sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha1 . El algoritmo predeterminado es sha-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operaciones.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y a menudo es tan largo como el tamaño de bloque o como el tamaño de la clave. Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación para Cifrado en Bloque====&lt;br /&gt;
&lt;br /&gt;
Los métodos que usaremos son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de cifradores en bloque para Cifrado en Flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más importantes es el RC4, aunque existen nuevos algoritmos de cifrado más eficientes como el Chacha20 y los modos de operación en flujo de cifradores de bloque como AES. &lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más seguro como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Una manera de cifrar un fichero es ejecutando el comando que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 utilizando la función &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1&lt;br /&gt;
HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña en la misma línea de comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WG&lt;br /&gt;
QFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt). Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
===== DES - EDE3 - CFB =====&lt;br /&gt;
&lt;br /&gt;
El 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. &lt;br /&gt;
&lt;br /&gt;
La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Si solo se usa la clave y el IV directamente, no es necesario especificar el '''salt''' y por tanto, no se usará dicho encabezado de 16 bytes. Como conclusión, si se cifra con una contraseña y luego se  usa la clave y el IV para el descifrado, se deberá quitar los primeros 16 bytes antes de descifrarlos correspondientes con el encabezado y la sal.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre la sal, la clave y el vector de inicialización:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-cfb -p -in texto.txt -out des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros. Pero en este ejemplo usaremos tanto la clave (key) como el vector de inicialización (IV) para el descifrado.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Al usar la clave y la sal para descifrar el fichero, se tiene que primero extraer la sal como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat des_ede3_cfb.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cfb_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat des_ede3_cfb_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cfb.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
&lt;br /&gt;
Para descifrar, se hará uso de la clave y la sal obtenida en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cfb -d -in des_ede3_cfb_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== aes - 128 - cbc =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 192 - cfb =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se haría de la misma manera que en DES - EDE3 - CFB añadiendo los comandos nuevos &amp;quot;-pbkdf2&amp;quot; y &amp;quot;-md sha1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 256 - ofb =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos la misma función que antes para introducir la contraseña desde un archivo pero a la hora de descifrar tendremos que introducir la contraseña a mano. De esta forma, se podrá verificar que la contraseña del archivo equivale a ponerla manualmente y con el mismo resultado. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la función &amp;quot;-pbkdf2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que contiene el fichero que se utilizó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo ===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se usa en algunos de los protocolos más populares como Transport Layer Security (TLS/SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) (para añadir seguridad en las redes inalámbricas). RC4 fue excluido enseguida de los estándares de alta seguridad por los criptógrafos y algunos modos de usar el algoritmo de criptografía RC4 lo han llevado a ser un sistema de criptografía muy inseguro, incluyendo su uso WEP. No está recomendado su uso en los nuevos sistemas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. RC4 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=RC4&amp;amp;oldid=104650982&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo. Tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2&lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3)openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' igual que antes pero usando la funcion ''-pass pass:password''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso se realizará un ejemplo en el que el emisor (Alice) enviará el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.cif), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con nuestra clave pública RSA (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob, nosotros en este caso) tendrán que haberse intercambiado las claves públicas.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Recibimos el mensaje de Alice y procedemos a descifrar la contraseña enviada por Alice con nuestra clave privada.Si nuestra clave privada está protegida, se nos solicitará la contraseña que la protege y que indicamos al crear la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Una vez obtenida la contraseña, se puede descifrar el &amp;quot;texto.cif&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.cif -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Verificar que el texto cifrado se ha firmado correctamente. Como se firmó con su clave privada, usaremos su clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Nota:'''PARA REALIZAR ESTE EJEMPLO SUPONEMOS QUE ALICE REALIZÓ PREVIAMENTE LAS SIGUIENTES OPERACIONES:&lt;br /&gt;
&lt;br /&gt;
; texto.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al realizar un &amp;quot;cat&amp;quot; del fichero &amp;quot;contraseña.txt&amp;quot; se observa la contraseña con la que Alice cifró el texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados ==&lt;br /&gt;
&lt;br /&gt;
Un certificado autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=10</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=10"/>
		<updated>2020-03-24T18:55:21Z</updated>

		<summary type="html">&lt;p&gt;Editor1: unificación de la instalación en CentOS y Ubuntu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu y CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Ubuntu o CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''las distribuciones de Linux ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la proporcionada por el sistema, que seguirá igual que antes de la instalación.&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Descargar la última versión de OpenSSL (1.1.1X siendo x la letra minúscula asignada a la última versión) ejecutando los siguientes comandos en una terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 1) cd /tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) wget https://www.openssl.org/source/openssl-1.1.1X.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) tar xvf openssl-1.1.1X.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cd openssl-1.1.1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) sudo  ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 6) sudo make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 7) sudo make test &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Y si todo ha ido bien... &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 8) sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Activar las librerías de la nueva versión, para ello hay que crear el fichero /etc/ld.so.conf.d/openssl-1.1.1X.conf, ejemplo con vi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 9) sudo vi /etc/ld.so.conf.d/openssl-1.1.1X.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Pulsamos &amp;quot;a&amp;quot; y añadimos la linea siguiente: &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; /usr/local/ssl/lib &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; pulsamos tecla de escape y ZZ y se sale del editor vi, guardando el fichero /etc/ld.so.conf.d/openssl-1.1.1X.conf y ejecutamos:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 10) sudo ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Guardar copia de las binarios de la versión antigua de OpenSSL existente en la instalación estándar (obviar este paso si el sistema no tenía instalado el OpenSSL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 11) sudo mv /usr/bin/openssl /usr/bin/openssl.backup &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 12) sudo mv /usr/bin/c_rehash /usr/bin/c_rehash.backup &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
Añadir /usr/local/ssl/bin al PATH editando el fichero ~/.bash_profile en CentOS y los ficheros /etc/environment y ~/.bash_profile en Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; en Centos : editar el fichero ~/.bash_profile y al final, cambiar la linea que pone PATH=$PATH:$HOME/bin por PATH=$PATH:$HOME/bin:/usr/local/ssl/bin &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; en Ubuntu : editar el fichero /etc/environment y añadir al final de la linea :/usr/local/ssl/bin ; editar el fichero ~/.profile y añadir al final source /etc/environment &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6: &lt;br /&gt;
&lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 13) openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones hash ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que cifran una entrada y la comprimen a una salida de menor longitud y son fáciles de calcular. Generan una salida consistente en una ristra de bits de tamaño fijo, específica para cada algoritmo que representa un resumen de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (integridad y autenticidad) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del resumen utilizado.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;clave&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades, se debe conocer como funciona, ya que existen antiguos documentos que han usado este algoritmo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Se realizará el resumen del &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MD5(texto.txt)= 1f669a0de621e1beb87baa527f6f1235&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de troceo que toma una entrada y produce un valor de hash de 160 bits (20 bytes) conocido como un resumen del mensaje , que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA-384, SHA-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática y evidenciando así la necesidad de elaborar una función hash más fuerte. Aunque el SHA-2 se comporta de forma parecida al algoritmo SHA-1, estos ataques no han sido extendidos satisfactoriamente a SHA-2. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 224 bits (28 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 56 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 256 bits (32 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 384 bits (48 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 512 bits (64 bytes) conocido como un resumen de mensaje, que generalmente se representa como un número hexadecimal , de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
SHA-3 ( Secure Hash Algorithm 3 ) es el último miembro de la familia de estándares de Secure Hash Algorithm , publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto del SHA-2 si se descubre alguna vulnerabilidad en éste último. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genera diferentes longitudes de resumen como SHA-2. En este caso usaremos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como prueba, se procederá a modificar el &amp;quot;texto.txt&amp;quot; solamente borrando una letra. Se observará que el resultado será totalmente diferente al anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA3-384(texto.txt)= 51e8b14f1c0eaae57d83445eb41d42ef730340d1880d30fb81a8660a12559c3072880d855273996aca33d75f006595a6&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Como conclusión''': para un mismo texto plano, dará un resultado diferente si la contraseña también es diferente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector).&lt;br /&gt;
&lt;br /&gt;
También destacar que, cuando una contraseña  se emplea como clave de cifrado, un sistema bien diseñado la pasa primero por un algoritmo de derivación de claves como el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;)&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Clave (criptografía) [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de diciembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Clave_(criptograf%C3%ADa)&amp;amp;oldid=107769781&amp;gt;.&amp;lt;/ref&amp;gt;. Asimismo, se agrega al hash  que usa la función de derivación unos dígitos aleatorios al que llamamos sal. Esto permite que para una misma contraseña, se generen distintas claves. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos se usan comandos donde la contraseña aparece explícita y es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password''.&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra e imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introduce el vector de inicialización (-iv IV).&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se mande un documento cifrado, hay que saber cuál de las dos versiones se han usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen documentos antiguos cifrados con ella.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el craqueo de contraseñas sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha1 . El algoritmo predeterminado es sha-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operaciones.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y a menudo es tan largo como el tamaño de bloque o como el tamaño de la clave. Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación para Cifrado en Bloque====&lt;br /&gt;
&lt;br /&gt;
Los métodos que usaremos son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de cifradores en bloque para Cifrado en Flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más importantes es el RC4, aunque existen nuevos algoritmos de cifrado más eficientes como el Chacha20 y los modos de operación en flujo de cifradores de bloque como AES. &lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más seguro como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Una manera de cifrar un fichero es ejecutando el comando que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 utilizando la función &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1&lt;br /&gt;
HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña en la misma línea de comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WG&lt;br /&gt;
QFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt). Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
===== DES - EDE3 - CFB =====&lt;br /&gt;
&lt;br /&gt;
El 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. &lt;br /&gt;
&lt;br /&gt;
La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Si solo se usa la clave y el IV directamente, no es necesario especificar el '''salt''' y por tanto, no se usará dicho encabezado de 16 bytes. Como conclusión, si se cifra con una contraseña y luego se  usa la clave y el IV para el descifrado, se deberá quitar los primeros 16 bytes antes de descifrarlos correspondientes con el encabezado y la sal.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre la sal, la clave y el vector de inicialización:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-cfb -p -in texto.txt -out des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros. Pero en este ejemplo usaremos tanto la clave (key) como el vector de inicialización (IV) para el descifrado.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Al usar la clave y la sal para descifrar el fichero, se tiene que primero extraer la sal como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat des_ede3_cfb.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cfb_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat des_ede3_cfb_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cfb.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
&lt;br /&gt;
Para descifrar, se hará uso de la clave y la sal obtenida en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cfb -d -in des_ede3_cfb_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== aes - 128 - cbc =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 192 - cfb =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se haría de la misma manera que en DES - EDE3 - CFB añadiendo los comandos nuevos &amp;quot;-pbkdf2&amp;quot; y &amp;quot;-md sha1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 256 - ofb =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos la misma función que antes para introducir la contraseña desde un archivo pero a la hora de descifrar tendremos que introducir la contraseña a mano. De esta forma, se podrá verificar que la contraseña del archivo equivale a ponerla manualmente y con el mismo resultado. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la función &amp;quot;-pbkdf2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que contiene el fichero que se utilizó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo ===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se usa en algunos de los protocolos más populares como Transport Layer Security (TLS/SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) (para añadir seguridad en las redes inalámbricas). RC4 fue excluido enseguida de los estándares de alta seguridad por los criptógrafos y algunos modos de usar el algoritmo de criptografía RC4 lo han llevado a ser un sistema de criptografía muy inseguro, incluyendo su uso WEP. No está recomendado su uso en los nuevos sistemas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. RC4 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=RC4&amp;amp;oldid=104650982&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo. Tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2&lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3)openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' igual que antes pero usando la funcion ''-pass pass:password''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso se realizará un ejemplo en el que el emisor (Alice) enviará el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.cif), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con nuestra clave pública RSA (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob, nosotros en este caso) tendrán que haberse intercambiado las claves públicas.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Recibimos el mensaje de Alice y procedemos a descifrar la contraseña enviada por Alice con nuestra clave privada.Si nuestra clave privada está protegida, se nos solicitará la contraseña que la protege y que indicamos al crear la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Una vez obtenida la contraseña, se puede descifrar el &amp;quot;texto.cif&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.cif -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Verificar que el texto cifrado se ha firmado correctamente. Como se firmó con su clave privada, usaremos su clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Nota:'''PARA REALIZAR ESTE EJEMPLO SUPONEMOS QUE ALICE REALIZÓ PREVIAMENTE LAS SIGUIENTES OPERACIONES:&lt;br /&gt;
&lt;br /&gt;
; texto.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al realizar un &amp;quot;cat&amp;quot; del fichero &amp;quot;contraseña.txt&amp;quot; se observa la contraseña con la que Alice cifró el texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados ==&lt;br /&gt;
&lt;br /&gt;
Un certificado autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=9</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=9"/>
		<updated>2020-03-24T18:03:10Z</updated>

		<summary type="html">&lt;p&gt;Editor1: cambio de la extensión .cert por .crt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== UBUNTU ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Linux como es Ubuntu.&amp;lt;ref&amp;gt;Colaborado de Web Site for Students. Manually Install The Latest OpenSSL Toolkit On Ubuntu 16.04 / 18.04 LTS [en línea]. Web Site for Students, 2018 [fecha de consulta: 26 de octubre del 2018]. Disponible en &amp;lt;https://websiteforstudents.com/manually-install-the-latest-openssl-toolkit-on-ubuntu-16-04-18-04-lts/&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Nota:''las distribuciones de Linux ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la proporcionada por el sistema, que seguirá igual que antes de la instalación.&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Descargar la última versión de OpenSSL (1.1.1) ejecutando los siguientes comandos en una terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 1) cd / tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) wget https://www.openssl.org/source/openssl- 1.1.1 .tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) tar xvf openssl-1.1.1.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cd openssl-1.1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) sudo ./config -Wl, - enable-new-dtags, -rpath, '$ (LIBRPATH)' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 6) hacer sudo &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 7) sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Para asegurarnos de que nuestro SO use la última versión de OpenSSL instalada, procedemos a actualizar las rutas de las páginas ''man'' y ''binaries'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 8) sudo nano /etc/manpath.config &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 9) Se añade: ''MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man'' como se muestra a continuación y guardamos: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MANPATH_MAP     /sbin                   /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/sbin               /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/games              /usr/share/man&lt;br /&gt;
MANPATH_MAP     /opt/bin                /opt/man&lt;br /&gt;
MANPATH_MAP     /opt/sbin               /opt/man&lt;br /&gt;
MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man &amp;lt;&amp;lt;--------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Se debe actualizar el manual de la base de datos ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 10) sudo mandb &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
También se puede actualizar la ruta de ejecución para incluir la nueva ubicación de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 11) sudo nano /etc/environment  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 12) Sustituimos la línea que nos aparece por defecto por la siguiente: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; PATH=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/local/ssl/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
=== CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''las distribuciones de Linux ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la proporcionada por el sistema, que seguirá igual que antes de la instalación.&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Descargar la última versión de OpenSSL (1.1.1) ejecutando los siguientes comandos en una terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 1) cd / tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) wget https://www.openssl.org/source/openssl-1.1.1.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) tar xvf openssl-1.1.1.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cd openssl-1.1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) sudo  ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 6) hacer sudo &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 7) sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Añadir /usr/local/openssl/bin al PATH editando el fichero ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Activar las librerías de la nueva versión:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 11) hacer vi /etc/ld.so.conf.d/openssl-1.1.1.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 12) Añadimos la linea siguiente: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; /usr/local/openssl/lib &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 13) y ejecutamos ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
&lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 14) openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones hash ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que cifran una entrada y la comprimen a una salida de menor longitud y son fáciles de calcular. Generan una salida consistente en una ristra de bits de tamaño fijo, específica para cada algoritmo que representa un resumen de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (integridad y autenticidad) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del resumen utilizado.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;clave&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades, se debe conocer como funciona, ya que existen antiguos documentos que han usado este algoritmo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Se realizará el resumen del &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MD5(texto.txt)= 1f669a0de621e1beb87baa527f6f1235&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de troceo que toma una entrada y produce un valor de hash de 160 bits (20 bytes) conocido como un resumen del mensaje , que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA-384, SHA-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática y evidenciando así la necesidad de elaborar una función hash más fuerte. Aunque el SHA-2 se comporta de forma parecida al algoritmo SHA-1, estos ataques no han sido extendidos satisfactoriamente a SHA-2. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 224 bits (28 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 56 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 256 bits (32 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 384 bits (48 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 512 bits (64 bytes) conocido como un resumen de mensaje, que generalmente se representa como un número hexadecimal , de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
SHA-3 ( Secure Hash Algorithm 3 ) es el último miembro de la familia de estándares de Secure Hash Algorithm , publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto del SHA-2 si se descubre alguna vulnerabilidad en éste último. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genera diferentes longitudes de resumen como SHA-2. En este caso usaremos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como prueba, se procederá a modificar el &amp;quot;texto.txt&amp;quot; solamente borrando una letra. Se observará que el resultado será totalmente diferente al anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA3-384(texto.txt)= 51e8b14f1c0eaae57d83445eb41d42ef730340d1880d30fb81a8660a12559c3072880d855273996aca33d75f006595a6&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Como conclusión''': para un mismo texto plano, dará un resultado diferente si la contraseña también es diferente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector).&lt;br /&gt;
&lt;br /&gt;
También destacar que, cuando una contraseña  se emplea como clave de cifrado, un sistema bien diseñado la pasa primero por un algoritmo de derivación de claves como el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;)&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Clave (criptografía) [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de diciembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Clave_(criptograf%C3%ADa)&amp;amp;oldid=107769781&amp;gt;.&amp;lt;/ref&amp;gt;. Asimismo, se agrega al hash  que usa la función de derivación unos dígitos aleatorios al que llamamos sal. Esto permite que para una misma contraseña, se generen distintas claves. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos se usan comandos donde la contraseña aparece explícita y es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password''.&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra e imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introduce el vector de inicialización (-iv IV).&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se mande un documento cifrado, hay que saber cuál de las dos versiones se han usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen documentos antiguos cifrados con ella.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el craqueo de contraseñas sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha1 . El algoritmo predeterminado es sha-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operaciones.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y a menudo es tan largo como el tamaño de bloque o como el tamaño de la clave. Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación para Cifrado en Bloque====&lt;br /&gt;
&lt;br /&gt;
Los métodos que usaremos son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de cifradores en bloque para Cifrado en Flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más importantes es el RC4, aunque existen nuevos algoritmos de cifrado más eficientes como el Chacha20 y los modos de operación en flujo de cifradores de bloque como AES. &lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más seguro como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Una manera de cifrar un fichero es ejecutando el comando que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 utilizando la función &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1&lt;br /&gt;
HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña en la misma línea de comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WG&lt;br /&gt;
QFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt). Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
===== DES - EDE3 - CFB =====&lt;br /&gt;
&lt;br /&gt;
El 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. &lt;br /&gt;
&lt;br /&gt;
La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Si solo se usa la clave y el IV directamente, no es necesario especificar el '''salt''' y por tanto, no se usará dicho encabezado de 16 bytes. Como conclusión, si se cifra con una contraseña y luego se  usa la clave y el IV para el descifrado, se deberá quitar los primeros 16 bytes antes de descifrarlos correspondientes con el encabezado y la sal.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre la sal, la clave y el vector de inicialización:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-cfb -p -in texto.txt -out des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros. Pero en este ejemplo usaremos tanto la clave (key) como el vector de inicialización (IV) para el descifrado.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Al usar la clave y la sal para descifrar el fichero, se tiene que primero extraer la sal como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat des_ede3_cfb.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cfb_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat des_ede3_cfb_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cfb.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
&lt;br /&gt;
Para descifrar, se hará uso de la clave y la sal obtenida en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cfb -d -in des_ede3_cfb_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== aes - 128 - cbc =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 192 - cfb =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se haría de la misma manera que en DES - EDE3 - CFB añadiendo los comandos nuevos &amp;quot;-pbkdf2&amp;quot; y &amp;quot;-md sha1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 256 - ofb =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos la misma función que antes para introducir la contraseña desde un archivo pero a la hora de descifrar tendremos que introducir la contraseña a mano. De esta forma, se podrá verificar que la contraseña del archivo equivale a ponerla manualmente y con el mismo resultado. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la función &amp;quot;-pbkdf2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que contiene el fichero que se utilizó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo ===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se usa en algunos de los protocolos más populares como Transport Layer Security (TLS/SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) (para añadir seguridad en las redes inalámbricas). RC4 fue excluido enseguida de los estándares de alta seguridad por los criptógrafos y algunos modos de usar el algoritmo de criptografía RC4 lo han llevado a ser un sistema de criptografía muy inseguro, incluyendo su uso WEP. No está recomendado su uso en los nuevos sistemas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. RC4 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=RC4&amp;amp;oldid=104650982&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo. Tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2&lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3)openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' igual que antes pero usando la funcion ''-pass pass:password''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso se realizará un ejemplo en el que el emisor (Alice) enviará el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.cif), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con nuestra clave pública RSA (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob, nosotros en este caso) tendrán que haberse intercambiado las claves públicas.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Recibimos el mensaje de Alice y procedemos a descifrar la contraseña enviada por Alice con nuestra clave privada.Si nuestra clave privada está protegida, se nos solicitará la contraseña que la protege y que indicamos al crear la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Una vez obtenida la contraseña, se puede descifrar el &amp;quot;texto.cif&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.cif -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Verificar que el texto cifrado se ha firmado correctamente. Como se firmó con su clave privada, usaremos su clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Nota:'''PARA REALIZAR ESTE EJEMPLO SUPONEMOS QUE ALICE REALIZÓ PREVIAMENTE LAS SIGUIENTES OPERACIONES:&lt;br /&gt;
&lt;br /&gt;
; texto.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al realizar un &amp;quot;cat&amp;quot; del fichero &amp;quot;contraseña.txt&amp;quot; se observa la contraseña con la que Alice cifró el texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados ==&lt;br /&gt;
&lt;br /&gt;
Un certificado autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.crt&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.crt&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.crt&amp;quot; firmado con el &amp;quot;certificadoIntermedio.crt&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.crt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.crt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoRaiz.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.crt -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certificado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt certificadoIntermedio.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.crt: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.crt -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.crt certificadoRaiz.crt &amp;gt; chain.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.crt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt chain.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.crt certificadoIntermedio.crt certificadoFinal.crt &amp;gt; todos.crt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.crt todos.crt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.crt -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=7</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=7"/>
		<updated>2019-03-19T13:11:45Z</updated>

		<summary type="html">&lt;p&gt;Editor1: /* CentOS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== UBUNTU ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Linux como es Ubuntu.&amp;lt;ref&amp;gt;Colaborado de Web Site for Students. Manually Install The Latest OpenSSL Toolkit On Ubuntu 16.04 / 18.04 LTS [en línea]. Web Site for Students, 2018 [fecha de consulta: 26 de octubre del 2018]. Disponible en &amp;lt;https://websiteforstudents.com/manually-install-the-latest-openssl-toolkit-on-ubuntu-16-04-18-04-lts/&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Nota:''las distribuciones de Linux ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la proporcionada por el sistema, que seguirá igual que antes de la instalación.&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Descargar la última versión de OpenSSL (1.1.1) ejecutando los siguientes comandos en una terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 1) cd / tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) wget https://www.openssl.org/source/openssl- 1.1.1 .tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) tar xvf openssl-1.1.1.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cd openssl-1.1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) sudo ./config -Wl, - enable-new-dtags, -rpath, '$ (LIBRPATH)' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 6) hacer sudo &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 7) sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Para asegurarnos de que nuestro SO use la última versión de OpenSSL instalada, procedemos a actualizar las rutas de las páginas ''man'' y ''binaries'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 8) sudo nano /etc/manpath.config &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 9) Se añade: ''MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man'' como se muestra a continuación y guardamos: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MANPATH_MAP     /sbin                   /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/sbin               /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/games              /usr/share/man&lt;br /&gt;
MANPATH_MAP     /opt/bin                /opt/man&lt;br /&gt;
MANPATH_MAP     /opt/sbin               /opt/man&lt;br /&gt;
MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man &amp;lt;&amp;lt;--------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Se debe actualizar el manual de la base de datos ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 10) sudo mandb &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
También se puede actualizar la ruta de ejecución para incluir la nueva ubicación de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 11) sudo nano /etc/environment  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 12) Sustituimos la línea que nos aparece por defecto por la siguiente: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; PATH=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/local/ssl/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
=== CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''las distribuciones de Linux ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la proporcionada por el sistema, que seguirá igual que antes de la instalación.&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Descargar la última versión de OpenSSL (1.1.1) ejecutando los siguientes comandos en una terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 1) cd / tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) wget https://www.openssl.org/source/openssl-1.1.1.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) tar xvf openssl-1.1.1.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cd openssl-1.1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) sudo  ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 6) hacer sudo &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 7) sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Añadir /usr/local/openssl/bin al PATH editando el fichero ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Activar las librerías de la nueva versión:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 11) hacer vi /etc/ld.so.conf.d/openssl-1.1.1.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 12) Añadimos la linea siguiente: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; /usr/local/openssl/lib &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 13) y ejecutamos ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
&lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 14) openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones hash ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que cifran una entrada y la comprimen a una salida de menor longitud y son fáciles de calcular. Generan una salida consistente en una ristra de bits de tamaño fijo, específica para cada algoritmo que representa un resumen de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (integridad y autenticidad) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del resumen utilizado.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;clave&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades, se debe conocer como funciona, ya que existen antiguos documentos que han usado este algoritmo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Se realizará el resumen del &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MD5(texto.txt)= 1f669a0de621e1beb87baa527f6f1235&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de troceo que toma una entrada y produce un valor de hash de 160 bits (20 bytes) conocido como un resumen del mensaje , que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA-384, SHA-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática y evidenciando así la necesidad de elaborar una función hash más fuerte. Aunque el SHA-2 se comporta de forma parecida al algoritmo SHA-1, estos ataques no han sido extendidos satisfactoriamente a SHA-2. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 224 bits (28 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 56 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 256 bits (32 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 384 bits (48 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 512 bits (64 bytes) conocido como un resumen de mensaje, que generalmente se representa como un número hexadecimal , de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
SHA-3 ( Secure Hash Algorithm 3 ) es el último miembro de la familia de estándares de Secure Hash Algorithm , publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto del SHA-2 si se descubre alguna vulnerabilidad en éste último. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genera diferentes longitudes de resumen como SHA-2. En este caso usaremos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como prueba, se procederá a modificar el &amp;quot;texto.txt&amp;quot; solamente borrando una letra. Se observará que el resultado será totalmente diferente al anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA3-384(texto.txt)= 51e8b14f1c0eaae57d83445eb41d42ef730340d1880d30fb81a8660a12559c3072880d855273996aca33d75f006595a6&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Como conclusión''': para un mismo texto plano, dará un resultado diferente si la contraseña también es diferente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector).&lt;br /&gt;
&lt;br /&gt;
También destacar que, cuando una contraseña  se emplea como clave de cifrado, un sistema bien diseñado la pasa primero por un algoritmo de derivación de claves como el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;)&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Clave (criptografía) [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de diciembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Clave_(criptograf%C3%ADa)&amp;amp;oldid=107769781&amp;gt;.&amp;lt;/ref&amp;gt;. Asimismo, se agrega al hash  que usa la función de derivación unos dígitos aleatorios al que llamamos sal. Esto permite que para una misma contraseña, se generen distintas claves. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos se usan comandos donde la contraseña aparece explícita y es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password''.&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra e imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introduce el vector de inicialización (-iv IV).&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se mande un documento cifrado, hay que saber cuál de las dos versiones se han usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen documentos antiguos cifrados con ella.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el craqueo de contraseñas sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha1 . El algoritmo predeterminado es sha-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operaciones.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y a menudo es tan largo como el tamaño de bloque o como el tamaño de la clave. Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación para Cifrado en Bloque====&lt;br /&gt;
&lt;br /&gt;
Los métodos que usaremos son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de cifradores en bloque para Cifrado en Flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más importantes es el RC4, aunque existen nuevos algoritmos de cifrado más eficientes como el Chacha20 y los modos de operación en flujo de cifradores de bloque como AES. &lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más seguro como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Una manera de cifrar un fichero es ejecutando el comando que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 utilizando la función &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1&lt;br /&gt;
HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña en la misma línea de comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WG&lt;br /&gt;
QFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt). Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
===== DES - EDE3 - CFB =====&lt;br /&gt;
&lt;br /&gt;
El 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. &lt;br /&gt;
&lt;br /&gt;
La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Si solo se usa la clave y el IV directamente, no es necesario especificar el '''salt''' y por tanto, no se usará dicho encabezado de 16 bytes. Como conclusión, si se cifra con una contraseña y luego se  usa la clave y el IV para el descifrado, se deberá quitar los primeros 16 bytes antes de descifrarlos correspondientes con el encabezado y la sal.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre la sal, la clave y el vector de inicialización:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-cfb -p -in texto.txt -out des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros. Pero en este ejemplo usaremos tanto la clave (key) como el vector de inicialización (IV) para el descifrado.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Al usar la clave y la sal para descifrar el fichero, se tiene que primero extraer la sal como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat des_ede3_cfb.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cfb_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat des_ede3_cfb_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cfb.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
&lt;br /&gt;
Para descifrar, se hará uso de la clave y la sal obtenida en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cfb -d -in des_ede3_cfb_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== aes - 128 - cbc =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 192 - cfb =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se haría de la misma manera que en DES - EDE3 - CFB añadiendo los comandos nuevos &amp;quot;-pbkdf2&amp;quot; y &amp;quot;-md sha1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 256 - ofb =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos la misma función que antes para introducir la contraseña desde un archivo pero a la hora de descifrar tendremos que introducir la contraseña a mano. De esta forma, se podrá verificar que la contraseña del archivo equivale a ponerla manualmente y con el mismo resultado. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la función &amp;quot;-pbkdf2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que contiene el fichero que se utilizó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo ===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se usa en algunos de los protocolos más populares como Transport Layer Security (TLS/SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) (para añadir seguridad en las redes inalámbricas). RC4 fue excluido enseguida de los estándares de alta seguridad por los criptógrafos y algunos modos de usar el algoritmo de criptografía RC4 lo han llevado a ser un sistema de criptografía muy inseguro, incluyendo su uso WEP. No está recomendado su uso en los nuevos sistemas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. RC4 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=RC4&amp;amp;oldid=104650982&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo. Tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2&lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3)openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' igual que antes pero usando la funcion ''-pass pass:password''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso se realizará un ejemplo en el que el emisor (Alice) enviará el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.cif), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con nuestra clave pública RSA (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob, nosotros en este caso) tendrán que haberse intercambiado las claves públicas.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Recibimos el mensaje de Alice y procedemos a descifrar la contraseña enviada por Alice con nuestra clave privada.Si nuestra clave privada está protegida, se nos solicitará la contraseña que la protege y que indicamos al crear la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Una vez obtenida la contraseña, se puede descifrar el &amp;quot;texto.cif&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.cif -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Verificar que el texto cifrado se ha firmado correctamente. Como se firmó con su clave privada, usaremos su clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Nota:'''PARA REALIZAR ESTE EJEMPLO SUPONEMOS QUE ALICE REALIZÓ PREVIAMENTE LAS SIGUIENTES OPERACIONES:&lt;br /&gt;
&lt;br /&gt;
; texto.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al realizar un &amp;quot;cat&amp;quot; del fichero &amp;quot;contraseña.txt&amp;quot; se observa la contraseña con la que Alice cifró el texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados ==&lt;br /&gt;
&lt;br /&gt;
Un certificado autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.cert&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.cert&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.cert&amp;quot; firmado con el &amp;quot;certificadoIntermedio.cert&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.cert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certifiado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.cert&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert certificadoRaiz.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.cert: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.cert -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certifiado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert certificadoIntermedio.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.cert: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.cert -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.cert certificadoRaiz.cert &amp;gt; chain.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.cert  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert chain.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.cert certificadoIntermedio.cert certificadoFinal.cert &amp;gt; todos.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert todos.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.cert -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=6</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=6"/>
		<updated>2019-03-19T13:06:55Z</updated>

		<summary type="html">&lt;p&gt;Editor1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== UBUNTU ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Linux como es Ubuntu.&amp;lt;ref&amp;gt;Colaborado de Web Site for Students. Manually Install The Latest OpenSSL Toolkit On Ubuntu 16.04 / 18.04 LTS [en línea]. Web Site for Students, 2018 [fecha de consulta: 26 de octubre del 2018]. Disponible en &amp;lt;https://websiteforstudents.com/manually-install-the-latest-openssl-toolkit-on-ubuntu-16-04-18-04-lts/&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Nota:''las distribuciones de Linux ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la proporcionada por el sistema, que seguirá igual que antes de la instalación.&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Descargar la última versión de OpenSSL (1.1.1) ejecutando los siguientes comandos en una terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 1) cd / tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) wget https://www.openssl.org/source/openssl- 1.1.1 .tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) tar xvf openssl-1.1.1.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cd openssl-1.1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) sudo ./config -Wl, - enable-new-dtags, -rpath, '$ (LIBRPATH)' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 6) hacer sudo &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 7) sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Para asegurarnos de que nuestro SO use la última versión de OpenSSL instalada, procedemos a actualizar las rutas de las páginas ''man'' y ''binaries'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 8) sudo nano /etc/manpath.config &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 9) Se añade: ''MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man'' como se muestra a continuación y guardamos: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MANPATH_MAP     /sbin                   /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/sbin               /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/games              /usr/share/man&lt;br /&gt;
MANPATH_MAP     /opt/bin                /opt/man&lt;br /&gt;
MANPATH_MAP     /opt/sbin               /opt/man&lt;br /&gt;
MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man &amp;lt;&amp;lt;--------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Se debe actualizar el manual de la base de datos ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 10) sudo mandb &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
También se puede actualizar la ruta de ejecución para incluir la nueva ubicación de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 11) sudo nano /etc/environment  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 12) Sustituimos la línea que nos aparece por defecto por la siguiente: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; PATH=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/local/ssl/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
=== CentOS ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución CentOS&lt;br /&gt;
&lt;br /&gt;
''Nota:''las distribuciones de Linux ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la proporcionada por el sistema, que seguirá igual que antes de la instalación.&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Descargar la última versión de OpenSSL (1.1.1) ejecutando los siguientes comandos en una terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 1) cd / tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) wget https://www.openssl.org/source/openssl- 1.1.1 .tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) tar xvf openssl-1.1.1.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cd openssl-1.1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) sudo  ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 6) hacer sudo &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 7) sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Añadir /usr/local/openssl/bin al PATH editando el fichero ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
Activar las librerías de la nueva versión:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 11) hacer vi /etc/ld.so.conf.d/openssl-1.1.0g.conf  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 12) Añadimos la linea siguiente: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; /usr/local/openssl/lib &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 13) y ejecutamos ldconfig -v &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 5: &lt;br /&gt;
&lt;br /&gt;
Salir de la sesión, volver a entrar y probar que funciona con&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 14) openssl version &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones hash ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que cifran una entrada y la comprimen a una salida de menor longitud y son fáciles de calcular. Generan una salida consistente en una ristra de bits de tamaño fijo, específica para cada algoritmo que representa un resumen de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (integridad y autenticidad) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del resumen utilizado.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;clave&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades, se debe conocer como funciona, ya que existen antiguos documentos que han usado este algoritmo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Se realizará el resumen del &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MD5(texto.txt)= 1f669a0de621e1beb87baa527f6f1235&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de troceo que toma una entrada y produce un valor de hash de 160 bits (20 bytes) conocido como un resumen del mensaje , que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA-384, SHA-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática y evidenciando así la necesidad de elaborar una función hash más fuerte. Aunque el SHA-2 se comporta de forma parecida al algoritmo SHA-1, estos ataques no han sido extendidos satisfactoriamente a SHA-2. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 224 bits (28 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 56 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 256 bits (32 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 384 bits (48 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 512 bits (64 bytes) conocido como un resumen de mensaje, que generalmente se representa como un número hexadecimal , de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
SHA-3 ( Secure Hash Algorithm 3 ) es el último miembro de la familia de estándares de Secure Hash Algorithm , publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto del SHA-2 si se descubre alguna vulnerabilidad en éste último. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genera diferentes longitudes de resumen como SHA-2. En este caso usaremos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como prueba, se procederá a modificar el &amp;quot;texto.txt&amp;quot; solamente borrando una letra. Se observará que el resultado será totalmente diferente al anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA3-384(texto.txt)= 51e8b14f1c0eaae57d83445eb41d42ef730340d1880d30fb81a8660a12559c3072880d855273996aca33d75f006595a6&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Como conclusión''': para un mismo texto plano, dará un resultado diferente si la contraseña también es diferente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector).&lt;br /&gt;
&lt;br /&gt;
También destacar que, cuando una contraseña  se emplea como clave de cifrado, un sistema bien diseñado la pasa primero por un algoritmo de derivación de claves como el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;)&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Clave (criptografía) [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de diciembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Clave_(criptograf%C3%ADa)&amp;amp;oldid=107769781&amp;gt;.&amp;lt;/ref&amp;gt;. Asimismo, se agrega al hash  que usa la función de derivación unos dígitos aleatorios al que llamamos sal. Esto permite que para una misma contraseña, se generen distintas claves. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos se usan comandos donde la contraseña aparece explícita y es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password''.&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra e imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introduce el vector de inicialización (-iv IV).&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se mande un documento cifrado, hay que saber cuál de las dos versiones se han usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen documentos antiguos cifrados con ella.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el craqueo de contraseñas sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha1 . El algoritmo predeterminado es sha-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operaciones.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y a menudo es tan largo como el tamaño de bloque o como el tamaño de la clave. Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación para Cifrado en Bloque====&lt;br /&gt;
&lt;br /&gt;
Los métodos que usaremos son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de cifradores en bloque para Cifrado en Flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más importantes es el RC4, aunque existen nuevos algoritmos de cifrado más eficientes como el Chacha20 y los modos de operación en flujo de cifradores de bloque como AES. &lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más seguro como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Una manera de cifrar un fichero es ejecutando el comando que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 utilizando la función &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1&lt;br /&gt;
HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña en la misma línea de comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WG&lt;br /&gt;
QFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt). Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
===== DES - EDE3 - CFB =====&lt;br /&gt;
&lt;br /&gt;
El 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. &lt;br /&gt;
&lt;br /&gt;
La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Si solo se usa la clave y el IV directamente, no es necesario especificar el '''salt''' y por tanto, no se usará dicho encabezado de 16 bytes. Como conclusión, si se cifra con una contraseña y luego se  usa la clave y el IV para el descifrado, se deberá quitar los primeros 16 bytes antes de descifrarlos correspondientes con el encabezado y la sal.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre la sal, la clave y el vector de inicialización:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-cfb -p -in texto.txt -out des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros. Pero en este ejemplo usaremos tanto la clave (key) como el vector de inicialización (IV) para el descifrado.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Al usar la clave y la sal para descifrar el fichero, se tiene que primero extraer la sal como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat des_ede3_cfb.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cfb_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat des_ede3_cfb_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cfb.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
&lt;br /&gt;
Para descifrar, se hará uso de la clave y la sal obtenida en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cfb -d -in des_ede3_cfb_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== aes - 128 - cbc =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 192 - cfb =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se haría de la misma manera que en DES - EDE3 - CFB añadiendo los comandos nuevos &amp;quot;-pbkdf2&amp;quot; y &amp;quot;-md sha1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 256 - ofb =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos la misma función que antes para introducir la contraseña desde un archivo pero a la hora de descifrar tendremos que introducir la contraseña a mano. De esta forma, se podrá verificar que la contraseña del archivo equivale a ponerla manualmente y con el mismo resultado. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la función &amp;quot;-pbkdf2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que contiene el fichero que se utilizó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo ===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se usa en algunos de los protocolos más populares como Transport Layer Security (TLS/SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) (para añadir seguridad en las redes inalámbricas). RC4 fue excluido enseguida de los estándares de alta seguridad por los criptógrafos y algunos modos de usar el algoritmo de criptografía RC4 lo han llevado a ser un sistema de criptografía muy inseguro, incluyendo su uso WEP. No está recomendado su uso en los nuevos sistemas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. RC4 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=RC4&amp;amp;oldid=104650982&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo. Tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2&lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3)openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' igual que antes pero usando la funcion ''-pass pass:password''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso se realizará un ejemplo en el que el emisor (Alice) enviará el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.cif), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con nuestra clave pública RSA (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob, nosotros en este caso) tendrán que haberse intercambiado las claves públicas.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Recibimos el mensaje de Alice y procedemos a descifrar la contraseña enviada por Alice con nuestra clave privada.Si nuestra clave privada está protegida, se nos solicitará la contraseña que la protege y que indicamos al crear la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Una vez obtenida la contraseña, se puede descifrar el &amp;quot;texto.cif&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.cif -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Verificar que el texto cifrado se ha firmado correctamente. Como se firmó con su clave privada, usaremos su clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Nota:'''PARA REALIZAR ESTE EJEMPLO SUPONEMOS QUE ALICE REALIZÓ PREVIAMENTE LAS SIGUIENTES OPERACIONES:&lt;br /&gt;
&lt;br /&gt;
; texto.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al realizar un &amp;quot;cat&amp;quot; del fichero &amp;quot;contraseña.txt&amp;quot; se observa la contraseña con la que Alice cifró el texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados ==&lt;br /&gt;
&lt;br /&gt;
Un certificado autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.cert&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.cert&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.cert&amp;quot; firmado con el &amp;quot;certificadoIntermedio.cert&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.cert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certifiado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.cert&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert certificadoRaiz.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.cert: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.cert -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certifiado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert certificadoIntermedio.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.cert: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.cert -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.cert certificadoRaiz.cert &amp;gt; chain.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.cert  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert chain.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.cert certificadoIntermedio.cert certificadoFinal.cert &amp;gt; todos.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert todos.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.cert -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=5</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=5"/>
		<updated>2019-01-21T13:24:15Z</updated>

		<summary type="html">&lt;p&gt;Editor1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== UBUNTU ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Linux como es Ubuntu.&amp;lt;ref&amp;gt;Colaborado de Web Site for Students. Manually Install The Latest OpenSSL Toolkit On Ubuntu 16.04 / 18.04 LTS [en línea]. Web Site for Students, 2018 [fecha de consulta: 26 de octubre del 2018]. Disponible en &amp;lt;https://websiteforstudents.com/manually-install-the-latest-openssl-toolkit-on-ubuntu-16-04-18-04-lts/&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Nota:''las distribuciones de Linux ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la proporcionada por el sistema, que seguirá igual que antes de la instalación.&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Descargar la última versión de OpenSSL (1.1.1) ejecutando los siguientes comandos en una terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 1) cd / tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) wget https://www.openssl.org/source/openssl- 1.1.1 .tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) tar xvf openssl-1.1.1.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cd openssl-1.1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) sudo ./config -Wl, - enable-new-dtags, -rpath, '$ (LIBRPATH)' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 6) hacer sudo &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 7) sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Para asegurarnos de que nuestro SO use la última versión de OpenSSL instalada, procedemos a actualizar las rutas de las páginas ''man'' y ''binaries'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 8) sudo nano /etc/manpath.config &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 9) Se añade: ''MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man'' como se muestra a continuación y guardamos: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MANPATH_MAP     /sbin                   /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/sbin               /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/games              /usr/share/man&lt;br /&gt;
MANPATH_MAP     /opt/bin                /opt/man&lt;br /&gt;
MANPATH_MAP     /opt/sbin               /opt/man&lt;br /&gt;
MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man &amp;lt;&amp;lt;--------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Se debe actualizar el manual de la base de datos ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 10) sudo mandb &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
También se puede actualizar la ruta de ejecución para incluir la nueva ubicación de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 11) sudo nano /etc/environment  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 12) Sustituimos la línea que nos aparece por defecto por la siguiente: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; PATH=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/local/ssl/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones hash ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que cifran una entrada y la comprimen a una salida de menor longitud y son fáciles de calcular. Generan una salida consistente en una ristra de bits de tamaño fijo, específica para cada algoritmo que representa un resumen de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (integridad y autenticidad) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del resumen utilizado.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;clave&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades, se debe conocer como funciona, ya que existen antiguos documentos que han usado este algoritmo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Se realizará el resumen del &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MD5(texto.txt)= 1f669a0de621e1beb87baa527f6f1235&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de troceo que toma una entrada y produce un valor de hash de 160 bits (20 bytes) conocido como un resumen del mensaje , que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA-384, SHA-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática y evidenciando así la necesidad de elaborar una función hash más fuerte. Aunque el SHA-2 se comporta de forma parecida al algoritmo SHA-1, estos ataques no han sido extendidos satisfactoriamente a SHA-2. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 224 bits (28 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 56 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 256 bits (32 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 384 bits (48 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 512 bits (64 bytes) conocido como un resumen de mensaje, que generalmente se representa como un número hexadecimal , de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
SHA-3 ( Secure Hash Algorithm 3 ) es el último miembro de la familia de estándares de Secure Hash Algorithm , publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto del SHA-2 si se descubre alguna vulnerabilidad en éste último. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genera diferentes longitudes de resumen como SHA-2. En este caso usaremos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como prueba, se procederá a modificar el &amp;quot;texto.txt&amp;quot; solamente borrando una letra. Se observará que el resultado será totalmente diferente al anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA3-384(texto.txt)= 51e8b14f1c0eaae57d83445eb41d42ef730340d1880d30fb81a8660a12559c3072880d855273996aca33d75f006595a6&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Como conclusión''': para un mismo texto plano, dará un resultado diferente si la contraseña también es diferente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector).&lt;br /&gt;
&lt;br /&gt;
También destacar que, cuando una contraseña  se emplea como clave de cifrado, un sistema bien diseñado la pasa primero por un algoritmo de derivación de claves como el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;)&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Clave (criptografía) [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de diciembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Clave_(criptograf%C3%ADa)&amp;amp;oldid=107769781&amp;gt;.&amp;lt;/ref&amp;gt;. Asimismo, se agrega al hash  que usa la función de derivación unos dígitos aleatorios al que llamamos sal. Esto permite que para una misma contraseña, se generen distintas claves. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos se usan comandos donde la contraseña aparece explícita y es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password''.&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra e imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introduce el vector de inicialización (-iv IV).&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se mande un documento cifrado, hay que saber cuál de las dos versiones se han usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen documentos antiguos cifrados con ella.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el craqueo de contraseñas sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha1 . El algoritmo predeterminado es sha-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operaciones.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y a menudo es tan largo como el tamaño de bloque o como el tamaño de la clave. Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación para Cifrado en Bloque====&lt;br /&gt;
&lt;br /&gt;
Los métodos que usaremos son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de cifradores en bloque para Cifrado en Flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más importantes es el RC4, aunque existen nuevos algoritmos de cifrado más eficientes como el Chacha20 y los modos de operación en flujo de cifradores de bloque como AES. &lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en bloque ===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más seguro como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Una manera de cifrar un fichero es ejecutando el comando que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 utilizando la función &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1&lt;br /&gt;
HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña en la misma línea de comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WG&lt;br /&gt;
QFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt). Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
===== DES - EDE3 - CFB =====&lt;br /&gt;
&lt;br /&gt;
El 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. &lt;br /&gt;
&lt;br /&gt;
La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Si solo se usa la clave y el IV directamente, no es necesario especificar el '''salt''' y por tanto, no se usará dicho encabezado de 16 bytes. Como conclusión, si se cifra con una contraseña y luego se  usa la clave y el IV para el descifrado, se deberá quitar los primeros 16 bytes antes de descifrarlos correspondientes con el encabezado y la sal.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre la sal, la clave y el vector de inicialización:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-cfb -p -in texto.txt -out des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros. Pero en este ejemplo usaremos tanto la clave (key) como el vector de inicialización (IV) para el descifrado.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Al usar la clave y la sal para descifrar el fichero, se tiene que primero extraer la sal como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat des_ede3_cfb.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cfb_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat des_ede3_cfb_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cfb.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
&lt;br /&gt;
Para descifrar, se hará uso de la clave y la sal obtenida en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cfb -d -in des_ede3_cfb_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== aes - 128 - cbc =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 192 - cfb =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se haría de la misma manera que en DES - EDE3 - CFB añadiendo los comandos nuevos &amp;quot;-pbkdf2&amp;quot; y &amp;quot;-md sha1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 256 - ofb =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos la misma función que antes para introducir la contraseña desde un archivo pero a la hora de descifrar tendremos que introducir la contraseña a mano. De esta forma, se podrá verificar que la contraseña del archivo equivale a ponerla manualmente y con el mismo resultado. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la función &amp;quot;-pbkdf2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que contiene el fichero que se utilizó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado en flujo ===&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se usa en algunos de los protocolos más populares como Transport Layer Security (TLS/SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) (para añadir seguridad en las redes inalámbricas). RC4 fue excluido enseguida de los estándares de alta seguridad por los criptógrafos y algunos modos de usar el algoritmo de criptografía RC4 lo han llevado a ser un sistema de criptografía muy inseguro, incluyendo su uso WEP. No está recomendado su uso en los nuevos sistemas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. RC4 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=RC4&amp;amp;oldid=104650982&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo. Tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2&lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3)openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' igual que antes pero usando la funcion ''-pass pass:password''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso se realizará un ejemplo en el que el emisor (Alice) enviará el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.cif), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con nuestra clave pública RSA (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob, nosotros en este caso) tendrán que haberse intercambiado las claves públicas.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Recibimos el mensaje de Alice y procedemos a descifrar la contraseña enviada por Alice con nuestra clave privada.Si nuestra clave privada está protegida, se nos solicitará la contraseña que la protege y que indicamos al crear la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Una vez obtenida la contraseña, se puede descifrar el &amp;quot;texto.cif&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.cif -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Verificar que el texto cifrado se ha firmado correctamente. Como se firmó con su clave privada, usaremos su clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Nota:'''PARA REALIZAR ESTE EJEMPLO SUPONEMOS QUE ALICE REALIZÓ PREVIAMENTE LAS SIGUIENTES OPERACIONES:&lt;br /&gt;
&lt;br /&gt;
; texto.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al realizar un &amp;quot;cat&amp;quot; del fichero &amp;quot;contraseña.txt&amp;quot; se observa la contraseña con la que Alice cifró el texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados ==&lt;br /&gt;
&lt;br /&gt;
Un certificado autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.cert&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.cert&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.cert&amp;quot; firmado con el &amp;quot;certificadoIntermedio.cert&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.cert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certifiado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.cert&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert certificadoRaiz.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.cert: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.cert -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certifiado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert certificadoIntermedio.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.cert: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.cert -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.cert certificadoRaiz.cert &amp;gt; chain.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.cert  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert chain.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.cert certificadoIntermedio.cert certificadoFinal.cert &amp;gt; todos.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert todos.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.cert -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=4</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=4"/>
		<updated>2019-01-21T13:18:28Z</updated>

		<summary type="html">&lt;p&gt;Editor1: /* Modos de Operación para Cifrado en Flujo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== UBUNTU ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Linux como es Ubuntu.&amp;lt;ref&amp;gt;Colaborado de Web Site for Students. Manually Install The Latest OpenSSL Toolkit On Ubuntu 16.04 / 18.04 LTS [en línea]. Web Site for Students, 2018 [fecha de consulta: 26 de octubre del 2018]. Disponible en &amp;lt;https://websiteforstudents.com/manually-install-the-latest-openssl-toolkit-on-ubuntu-16-04-18-04-lts/&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Nota:''las distribuciones de Linux ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la proporcionada por el sistema, que seguirá igual que antes de la instalación.&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Descargar la última versión de OpenSSL (1.1.1) ejecutando los siguientes comandos en una terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 1) cd / tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) wget https://www.openssl.org/source/openssl- 1.1.1 .tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) tar xvf openssl-1.1.1.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cd openssl-1.1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) sudo ./config -Wl, - enable-new-dtags, -rpath, '$ (LIBRPATH)' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 6) hacer sudo &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 7) sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Para asegurarnos de que nuestro SO use la última versión de OpenSSL instalada, procedemos a actualizar las rutas de las páginas ''man'' y ''binaries'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 8) sudo nano /etc/manpath.config &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 9) Se añade: ''MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man'' como se muestra a continuación y guardamos: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MANPATH_MAP     /sbin                   /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/sbin               /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/games              /usr/share/man&lt;br /&gt;
MANPATH_MAP     /opt/bin                /opt/man&lt;br /&gt;
MANPATH_MAP     /opt/sbin               /opt/man&lt;br /&gt;
MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man &amp;lt;&amp;lt;--------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Se debe actualizar el manual de la base de datos ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 10) sudo mandb &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
También se puede actualizar la ruta de ejecución para incluir la nueva ubicación de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 11) sudo nano /etc/environment  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 12) Sustituimos la línea que nos aparece por defecto por la siguiente: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; PATH=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/local/ssl/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones hash ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que cifran una entrada y la comprimen a una salida de menor longitud y son fáciles de calcular. Generan una salida consistente en una ristra de bits de tamaño fijo, específica para cada algoritmo que representa un resumen de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (integridad y autenticidad) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del resumen utilizado.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;clave&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades, se debe conocer como funciona, ya que existen antiguos documentos que han usado este algoritmo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Se realizará el resumen del &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MD5(texto.txt)= 1f669a0de621e1beb87baa527f6f1235&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de troceo que toma una entrada y produce un valor de hash de 160 bits (20 bytes) conocido como un resumen del mensaje , que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA-384, SHA-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática y evidenciando así la necesidad de elaborar una función hash más fuerte. Aunque el SHA-2 se comporta de forma parecida al algoritmo SHA-1, estos ataques no han sido extendidos satisfactoriamente a SHA-2. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 224 bits (28 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 56 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 256 bits (32 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 384 bits (48 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 512 bits (64 bytes) conocido como un resumen de mensaje, que generalmente se representa como un número hexadecimal , de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
SHA-3 ( Secure Hash Algorithm 3 ) es el último miembro de la familia de estándares de Secure Hash Algorithm , publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto del SHA-2 si se descubre alguna vulnerabilidad en éste último. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genera diferentes longitudes de resumen como SHA-2. En este caso usaremos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como prueba, se procederá a modificar el &amp;quot;texto.txt&amp;quot; solamente borrando una letra. Se observará que el resultado será totalmente diferente al anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA3-384(texto.txt)= 51e8b14f1c0eaae57d83445eb41d42ef730340d1880d30fb81a8660a12559c3072880d855273996aca33d75f006595a6&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Como conclusión''': para un mismo texto plano, dará un resultado diferente si la contraseña también es diferente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector).&lt;br /&gt;
&lt;br /&gt;
También destacar que, cuando una contraseña  se emplea como clave de cifrado, un sistema bien diseñado la pasa primero por un algoritmo de derivación de claves como el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;)&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Clave (criptografía) [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de diciembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Clave_(criptograf%C3%ADa)&amp;amp;oldid=107769781&amp;gt;.&amp;lt;/ref&amp;gt;. Asimismo, se agrega al hash  que usa la función de derivación unos dígitos aleatorios al que llamamos sal. Esto permite que para una misma contraseña, se generen distintas claves. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos se usan comandos donde la contraseña aparece explícita y es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password''.&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra e imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introduce el vector de inicialización (-iv IV).&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se mande un documento cifrado, hay que saber cuál de las dos versiones se han usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen documentos antiguos cifrados con ella.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el craqueo de contraseñas sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha1 . El algoritmo predeterminado es sha-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operaciones.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y a menudo es tan largo como el tamaño de bloque o como el tamaño de la clave. Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación para Cifrado en Bloque====&lt;br /&gt;
&lt;br /&gt;
Los métodos que usaremos son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación de cifradores en bloque para Cifrado en Flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se aplican a cifradores en bloque, realmente producen un cifrado en flujo. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más importantes es el RC4, aunque existen nuevos algoritmos de cifrado más eficientes como el Chacha20 y los modos de operación en flujo de cifradores de bloque como AES. &lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado ===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más seguro como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Una manera de cifrar un fichero es ejecutando el comando que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 utilizando la función &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1&lt;br /&gt;
HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña en la misma línea de comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WG&lt;br /&gt;
QFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt). Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
===== DES - EDE3 - CFB =====&lt;br /&gt;
&lt;br /&gt;
El 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. &lt;br /&gt;
&lt;br /&gt;
La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Si solo se usa la clave y el IV directamente, no es necesario especificar el '''salt''' y por tanto, no se usará dicho encabezado de 16 bytes. Como conclusión, si se cifra con una contraseña y luego se  usa la clave y el IV para el descifrado, se deberá quitar los primeros 16 bytes antes de descifrarlos correspondientes con el encabezado y la sal.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre la sal, la clave y el vector de inicialización:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-cfb -p -in texto.txt -out des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros. Pero en este ejemplo usaremos tanto la clave (key) como el vector de inicialización (IV) para el descifrado.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Al usar la clave y la sal para descifrar el fichero, se tiene que primero extraer la sal como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat des_ede3_cfb.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cfb_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat des_ede3_cfb_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cfb.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
&lt;br /&gt;
Para descifrar, se hará uso de la clave y la sal obtenida en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cfb -d -in des_ede3_cfb_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== aes - 128 - cbc =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 192 - cfb =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se haría de la misma manera que en DES - EDE3 - CFB añadiendo los comandos nuevos &amp;quot;-pbkdf2&amp;quot; y &amp;quot;-md sha1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 256 - ofb =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos la misma función que antes para introducir la contraseña desde un archivo pero a la hora de descifrar tendremos que introducir la contraseña a mano. De esta forma, se podrá verificar que la contraseña del archivo equivale a ponerla manualmente y con el mismo resultado. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la función &amp;quot;-pbkdf2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que contiene el fichero que se utilizó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se usa en algunos de los protocolos más populares como Transport Layer Security (TLS/SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) (para añadir seguridad en las redes inalámbricas). RC4 fue excluido enseguida de los estándares de alta seguridad por los criptógrafos y algunos modos de usar el algoritmo de criptografía RC4 lo han llevado a ser un sistema de criptografía muy inseguro, incluyendo su uso WEP. No está recomendado su uso en los nuevos sistemas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. RC4 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=RC4&amp;amp;oldid=104650982&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo. Tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2&lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3)openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' igual que antes pero usando la funcion ''-pass pass:password''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso se realizará un ejemplo en el que el emisor (Alice) enviará el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.cif), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con nuestra clave pública RSA (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob, nosotros en este caso) tendrán que haberse intercambiado las claves públicas.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Recibimos el mensaje de Alice y procedemos a descifrar la contraseña enviada por Alice con nuestra clave privada.Si nuestra clave privada está protegida, se nos solicitará la contraseña que la protege y que indicamos al crear la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Una vez obtenida la contraseña, se puede descifrar el &amp;quot;texto.cif&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.cif -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Verificar que el texto cifrado se ha firmado correctamente. Como se firmó con su clave privada, usaremos su clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Nota:'''PARA REALIZAR ESTE EJEMPLO SUPONEMOS QUE ALICE REALIZÓ PREVIAMENTE LAS SIGUIENTES OPERACIONES:&lt;br /&gt;
&lt;br /&gt;
; texto.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al realizar un &amp;quot;cat&amp;quot; del fichero &amp;quot;contraseña.txt&amp;quot; se observa la contraseña con la que Alice cifró el texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados ==&lt;br /&gt;
&lt;br /&gt;
Un certificado autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.cert&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.cert&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.cert&amp;quot; firmado con el &amp;quot;certificadoIntermedio.cert&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.cert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certifiado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.cert&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert certificadoRaiz.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.cert: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.cert -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certifiado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert certificadoIntermedio.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.cert: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.cert -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.cert certificadoRaiz.cert &amp;gt; chain.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.cert  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert chain.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.cert certificadoIntermedio.cert certificadoFinal.cert &amp;gt; todos.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert todos.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.cert -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=3</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=3"/>
		<updated>2019-01-17T17:33:54Z</updated>

		<summary type="html">&lt;p&gt;Editor1: correccion de la primera frase &amp;quot;Esto lo ha escrito Antonio&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== UBUNTU ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Linux como es Ubuntu.&amp;lt;ref&amp;gt;Colaborado de Web Site for Students. Manually Install The Latest OpenSSL Toolkit On Ubuntu 16.04 / 18.04 LTS [en línea]. Web Site for Students, 2018 [fecha de consulta: 26 de octubre del 2018]. Disponible en &amp;lt;https://websiteforstudents.com/manually-install-the-latest-openssl-toolkit-on-ubuntu-16-04-18-04-lts/&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Nota:''las distribuciones de Linux ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la proporcionada por el sistema, que seguirá igual que antes de la instalación.&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Descargar la última versión de OpenSSL (1.1.1) ejecutando los siguientes comandos en una terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 1) cd / tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) wget https://www.openssl.org/source/openssl- 1.1.1 .tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) tar xvf openssl-1.1.1.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cd openssl-1.1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) sudo ./config -Wl, - enable-new-dtags, -rpath, '$ (LIBRPATH)' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 6) hacer sudo &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 7) sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Para asegurarnos de que nuestro SO use la última versión de OpenSSL instalada, procedemos a actualizar las rutas de las páginas ''man'' y ''binaries'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 8) sudo nano /etc/manpath.config &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 9) Se añade: ''MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man'' como se muestra a continuación y guardamos: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MANPATH_MAP     /sbin                   /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/sbin               /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/games              /usr/share/man&lt;br /&gt;
MANPATH_MAP     /opt/bin                /opt/man&lt;br /&gt;
MANPATH_MAP     /opt/sbin               /opt/man&lt;br /&gt;
MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man &amp;lt;&amp;lt;--------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Se debe actualizar el manual de la base de datos ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 10) sudo mandb &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
También se puede actualizar la ruta de ejecución para incluir la nueva ubicación de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 11) sudo nano /etc/environment  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 12) Sustituimos la línea que nos aparece por defecto por la siguiente: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; PATH=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/local/ssl/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones hash ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que cifran una entrada y la comprimen a una salida de menor longitud y son fáciles de calcular. Generan una salida consistente en una ristra de bits de tamaño fijo, específica para cada algoritmo que representa un resumen de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (integridad y autenticidad) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del resumen utilizado.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;clave&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades, se debe conocer como funciona, ya que existen antiguos documentos que han usado este algoritmo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Se realizará el resumen del &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MD5(texto.txt)= 1f669a0de621e1beb87baa527f6f1235&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de troceo que toma una entrada y produce un valor de hash de 160 bits (20 bytes) conocido como un resumen del mensaje , que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA-384, SHA-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática y evidenciando así la necesidad de elaborar una función hash más fuerte. Aunque el SHA-2 se comporta de forma parecida al algoritmo SHA-1, estos ataques no han sido extendidos satisfactoriamente a SHA-2. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 224 bits (28 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 56 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 256 bits (32 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 384 bits (48 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 512 bits (64 bytes) conocido como un resumen de mensaje, que generalmente se representa como un número hexadecimal , de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
SHA-3 ( Secure Hash Algorithm 3 ) es el último miembro de la familia de estándares de Secure Hash Algorithm , publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto del SHA-2 si se descubre alguna vulnerabilidad en éste último. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genera diferentes longitudes de resumen como SHA-2. En este caso usaremos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como prueba, se procederá a modificar el &amp;quot;texto.txt&amp;quot; solamente borrando una letra. Se observará que el resultado será totalmente diferente al anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA3-384(texto.txt)= 51e8b14f1c0eaae57d83445eb41d42ef730340d1880d30fb81a8660a12559c3072880d855273996aca33d75f006595a6&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Como conclusión''': para un mismo texto plano, dará un resultado diferente si la contraseña también es diferente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector).&lt;br /&gt;
&lt;br /&gt;
También destacar que, cuando una contraseña  se emplea como clave de cifrado, un sistema bien diseñado la pasa primero por un algoritmo de derivación de claves como el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;)&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Clave (criptografía) [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de diciembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Clave_(criptograf%C3%ADa)&amp;amp;oldid=107769781&amp;gt;.&amp;lt;/ref&amp;gt;. Asimismo, se agrega al hash  que usa la función de derivación unos dígitos aleatorios al que llamamos sal. Esto permite que para una misma contraseña, se generen distintas claves. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos se usan comandos donde la contraseña aparece explícita y es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password''.&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra e imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introduce el vector de inicialización (-iv IV).&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se mande un documento cifrado, hay que saber cuál de las dos versiones se han usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen documentos antiguos cifrados con ella.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el craqueo de contraseñas sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha1 . El algoritmo predeterminado es sha-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operaciones.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y a menudo es tan largo como el tamaño de bloque o como el tamaño de la clave. Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación para Cifrado en Bloque====&lt;br /&gt;
&lt;br /&gt;
Los métodos que usaremos son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación para Cifrado en Flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se consideren modos de operación para un cifrado en bloque, posee algunas características propias de un cifrado en flujo. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más importantes es el RC4, aunque existen nuevos algoritmos de cifrado más eficientes como el Chacha20 y los modos de operación en flujo de cifradores de bloque como AES. &lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado ===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más seguro como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Una manera de cifrar un fichero es ejecutando el comando que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 utilizando la función &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1&lt;br /&gt;
HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña en la misma línea de comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WG&lt;br /&gt;
QFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt). Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
===== DES - EDE3 - CFB =====&lt;br /&gt;
&lt;br /&gt;
El 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. &lt;br /&gt;
&lt;br /&gt;
La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Si solo se usa la clave y el IV directamente, no es necesario especificar el '''salt''' y por tanto, no se usará dicho encabezado de 16 bytes. Como conclusión, si se cifra con una contraseña y luego se  usa la clave y el IV para el descifrado, se deberá quitar los primeros 16 bytes antes de descifrarlos correspondientes con el encabezado y la sal.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre la sal, la clave y el vector de inicialización:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-cfb -p -in texto.txt -out des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros. Pero en este ejemplo usaremos tanto la clave (key) como el vector de inicialización (IV) para el descifrado.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Al usar la clave y la sal para descifrar el fichero, se tiene que primero extraer la sal como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat des_ede3_cfb.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cfb_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat des_ede3_cfb_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cfb.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
&lt;br /&gt;
Para descifrar, se hará uso de la clave y la sal obtenida en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cfb -d -in des_ede3_cfb_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== aes - 128 - cbc =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 192 - cfb =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se haría de la misma manera que en DES - EDE3 - CFB añadiendo los comandos nuevos &amp;quot;-pbkdf2&amp;quot; y &amp;quot;-md sha1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 256 - ofb =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos la misma función que antes para introducir la contraseña desde un archivo pero a la hora de descifrar tendremos que introducir la contraseña a mano. De esta forma, se podrá verificar que la contraseña del archivo equivale a ponerla manualmente y con el mismo resultado. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la función &amp;quot;-pbkdf2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que contiene el fichero que se utilizó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se usa en algunos de los protocolos más populares como Transport Layer Security (TLS/SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) (para añadir seguridad en las redes inalámbricas). RC4 fue excluido enseguida de los estándares de alta seguridad por los criptógrafos y algunos modos de usar el algoritmo de criptografía RC4 lo han llevado a ser un sistema de criptografía muy inseguro, incluyendo su uso WEP. No está recomendado su uso en los nuevos sistemas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. RC4 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=RC4&amp;amp;oldid=104650982&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo. Tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2&lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3)openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' igual que antes pero usando la funcion ''-pass pass:password''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso se realizará un ejemplo en el que el emisor (Alice) enviará el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.cif), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con nuestra clave pública RSA (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob, nosotros en este caso) tendrán que haberse intercambiado las claves públicas.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Recibimos el mensaje de Alice y procedemos a descifrar la contraseña enviada por Alice con nuestra clave privada.Si nuestra clave privada está protegida, se nos solicitará la contraseña que la protege y que indicamos al crear la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Una vez obtenida la contraseña, se puede descifrar el &amp;quot;texto.cif&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.cif -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Verificar que el texto cifrado se ha firmado correctamente. Como se firmó con su clave privada, usaremos su clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Nota:'''PARA REALIZAR ESTE EJEMPLO SUPONEMOS QUE ALICE REALIZÓ PREVIAMENTE LAS SIGUIENTES OPERACIONES:&lt;br /&gt;
&lt;br /&gt;
; texto.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al realizar un &amp;quot;cat&amp;quot; del fichero &amp;quot;contraseña.txt&amp;quot; se observa la contraseña con la que Alice cifró el texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados ==&lt;br /&gt;
&lt;br /&gt;
Un certificado autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.cert&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.cert&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.cert&amp;quot; firmado con el &amp;quot;certificadoIntermedio.cert&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.cert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certifiado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.cert&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert certificadoRaiz.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.cert: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.cert -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certifiado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert certificadoIntermedio.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.cert: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.cert -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.cert certificadoRaiz.cert &amp;gt; chain.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.cert  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert chain.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.cert certificadoIntermedio.cert certificadoFinal.cert &amp;gt; todos.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert todos.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.cert -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
	<entry>
		<id>https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=2</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://openssl.cicei.com/index.php?title=P%C3%A1gina_principal&amp;diff=2"/>
		<updated>2019-01-17T14:24:33Z</updated>

		<summary type="html">&lt;p&gt;Editor1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta página consiste en un manual de operaciones básicas en formato &amp;lt;tt&amp;gt;HowTo sobre Wiki de la herramienta OpenSSL en modo de comandos&amp;lt;/tt&amp;gt; relativos con el cifrado de ficheros, la generación y manipulación de claves simétricas, certificados digitales, correo electrónico seguro, etc. Además, se combinarán diferentes ejemplos prácticos de los comandos más relevantes de OpenSSL haciendo un estudio y análisis de cada caso. &lt;br /&gt;
&lt;br /&gt;
Para ello, se ofrecerá una guía para &amp;lt;tt&amp;gt;INSTALAR&amp;lt;/tt&amp;gt; la última versión de OpenSSL que corresponde con la 1.1.1 y así, poder desarrollar ejemplos prácticos con la última versión mejorada de esta herramienta.&lt;br /&gt;
&lt;br /&gt;
== Instalación OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== WINDOWS ===&lt;br /&gt;
&lt;br /&gt;
Esto lo ha puesto Antonio.&lt;br /&gt;
&lt;br /&gt;
Para la instalación de OpenSSL en Windows, se debe de realizar correctamente los pasos que se describen a continuación. Además, al instalar OpenSSL puede que el sistema requiera usar Microsoft Visual C++ ([https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads Descarga]).&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a descargar la última versión de OpenSSL, la cuál podemos encontrar en la página de [https://slproweb.com/products/Win32OpenSSL.html slproweb]. Según el caso, se elige el SO de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
Se ejecuta el ''archivo.exe'' descargado y se mantiene la configuración que aparece por defecto excepto, cuando pida copiar OpenSSL que se seleccionará la opción: ''The OpenSSL binaries (/bin) directory''.&lt;br /&gt;
&lt;br /&gt;
;Paso 3;&lt;br /&gt;
&lt;br /&gt;
1) En el buscador de Windows se escribe los siguiente: ''sysdm.cpl'' para abrir las Propiedades del Sistema.&lt;br /&gt;
&lt;br /&gt;
2) ''Opciones Avanzadas''.&lt;br /&gt;
&lt;br /&gt;
3) ''Variables de Entorno''.&lt;br /&gt;
&lt;br /&gt;
4) En variables del sistema, se selecciona ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
5) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
6) Escribir ''C:\Program Files\OpenSSL-Win64''.&lt;br /&gt;
&lt;br /&gt;
7) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
8) Seleccionar de nuevo ''Path'' y ''editar''.&lt;br /&gt;
&lt;br /&gt;
9) ''Nuevo''.&lt;br /&gt;
&lt;br /&gt;
10) Escribir ''C:\Program Files\OpenSSL-Win64\bin''&lt;br /&gt;
&lt;br /&gt;
11) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
12) En variables de usuario, se selecciona ''nueva''.&lt;br /&gt;
&lt;br /&gt;
13) En el nombre de la variable se pone lo siguiente: ''OPENSSL_CONF''.&lt;br /&gt;
&lt;br /&gt;
14) En el valor de la variable se pone lo siguiente: ''C:\Program Files\OpenSSL-Win64\bin\cnf''.&lt;br /&gt;
&lt;br /&gt;
15) ''Aceptar''.&lt;br /&gt;
&lt;br /&gt;
;Paso 6:&lt;br /&gt;
&lt;br /&gt;
En la terminal se escribe ''openssl'' y tiene que salir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto significa que está listo para su uso.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Puede que al instalar la herramienta OpenSSL para equipos de 32 bits, los directorios cambien.&lt;br /&gt;
&lt;br /&gt;
=== UBUNTU ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar manualmente la última versión de OpenSSL en una distribución Linux como es Ubuntu.&amp;lt;ref&amp;gt;Colaborado de Web Site for Students. Manually Install The Latest OpenSSL Toolkit On Ubuntu 16.04 / 18.04 LTS [en línea]. Web Site for Students, 2018 [fecha de consulta: 26 de octubre del 2018]. Disponible en &amp;lt;https://websiteforstudents.com/manually-install-the-latest-openssl-toolkit-on-ubuntu-16-04-18-04-lts/&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Nota:''las distribuciones de Linux ya tienen instalada una versión de OpenSSL que suele ser anterior a la última. Además, la versión instalada es utilizada por varios componentes del sistema operativo. Por ello, mostramos como instalar la última versión sin afectar a la proporcionada por el sistema, que seguirá igual que antes de la instalación.&lt;br /&gt;
&lt;br /&gt;
;Paso 1: &lt;br /&gt;
Descargar la última versión de OpenSSL (1.1.1) ejecutando los siguientes comandos en una terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 1) cd / tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) wget https://www.openssl.org/source/openssl- 1.1.1 .tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) tar xvf openssl-1.1.1.tar.gz &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2: &lt;br /&gt;
A continuación, ejecutamos los siguientes comandos para realizar la instalación de esta herramienta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cd openssl-1.1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) sudo ./config -Wl, - enable-new-dtags, -rpath, '$ (LIBRPATH)' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 6) hacer sudo &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 7) sudo make install &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Para asegurarnos de que nuestro SO use la última versión de OpenSSL instalada, procedemos a actualizar las rutas de las páginas ''man'' y ''binaries'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 8) sudo nano /etc/manpath.config &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 9) Se añade: ''MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man'' como se muestra a continuación y guardamos: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MANPATH_MAP     /sbin                   /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/sbin               /usr/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/bin          /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/man&lt;br /&gt;
MANPATH_MAP     /usr/local/sbin         /usr/local/share/man&lt;br /&gt;
MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man&lt;br /&gt;
MANPATH_MAP     /usr/games              /usr/share/man&lt;br /&gt;
MANPATH_MAP     /opt/bin                /opt/man&lt;br /&gt;
MANPATH_MAP     /opt/sbin               /opt/man&lt;br /&gt;
MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man &amp;lt;&amp;lt;--------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3: &lt;br /&gt;
Se debe actualizar el manual de la base de datos ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 10) sudo mandb &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
También se puede actualizar la ruta de ejecución para incluir la nueva ubicación de OpenSSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 11) sudo nano /etc/environment  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 12) Sustituimos la línea que nos aparece por defecto por la siguiente: &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; PATH=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/local/ssl/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4: &lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
===MAC OS===&lt;br /&gt;
&lt;br /&gt;
En este apartado se explica como instalar la última versión de OpenSSL usando un gestor de paquetes para facilitar la instalación en este tipo de SO. En este caso, se usará el gestor de paquetes ''[https://brew.sh/index_es brew]''.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Instalamos la última versión de OpenSSL de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) brew install openssl@1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Si en el equipo donde se va realizar la operación no tiene instalada ninguna versión de esta herramienta, bastaría con ejecutar el paso anterior. Si no es así, se debe ejecutar los comandos que se recomiendan en el proceso de instalación y de esta forma, se dará prioridad a la nueva versión instalada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to have openssl@1.1 first in your PATH run:&lt;br /&gt;
  &lt;br /&gt;
  echo 'export PATH=&amp;quot;/usr/local/opt/openssl@1.1/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
For compilers to find openssl@1.1 you may need to set:&lt;br /&gt;
&lt;br /&gt;
  export LDFLAGS=&amp;quot;-L/usr/local/opt/openssl@1.1/lib&amp;quot;&lt;br /&gt;
  export CPPFLAGS=&amp;quot;-I/usr/local/opt/openssl@1.1/include&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se reinicia el equipo.&lt;br /&gt;
&lt;br /&gt;
== Resúmenes ==&lt;br /&gt;
&lt;br /&gt;
=== Funciones hash ===&lt;br /&gt;
&lt;br /&gt;
[[File:Hash function2-es.svg|250 px|thumb]]&lt;br /&gt;
&lt;br /&gt;
A las funciones resumen también se les llama funciones hash o funciones digest. Las funciones hash criptográficas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Función hash [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash&amp;amp;oldid=107845867&amp;gt;.&amp;lt;/ref&amp;gt; son aquellas que cifran una entrada y la comprimen a una salida de menor longitud y son fáciles de calcular. Generan una salida consistente en una ristra de bits de tamaño fijo, específica para cada algoritmo que representa un resumen de toda la información del fichero de entrada. &amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt; Uno de los requisitos de estas funciones es que debe ser complejo encontrar colisiones, es decir, debe ser complejo encontrar dos mensajes distintos con el mismo resumen. &amp;lt;ref&amp;gt;D. Eloi Sanfelix. Curso de privacidad y protección de comunicaciones digitales [en línea]. Universidad Politécnica de Madrid, 2013 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades (integridad y autenticidad) que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad, garantizando que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña, firmar digitalmente un documento, protección de claves, etc. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.&amp;lt;ref&amp;gt;Estilo ISO de citas bibliográficas Colaboradores de Wikipedia. Función hash criptográfica [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 5 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Funci%C3%B3n_hash_criptogr%C3%A1fica&amp;amp;oldid=108461646&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''dgst'''''&lt;br /&gt;
&lt;br /&gt;
; -digest&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del resumen utilizado.&lt;br /&gt;
&lt;br /&gt;
; -binary&lt;br /&gt;
&lt;br /&gt;
Salida en forma binaria.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Nombre del archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign filename&lt;br /&gt;
&lt;br /&gt;
Firma el resumen usando la clave privada en &amp;quot;filename&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; -verify filename&lt;br /&gt;
&lt;br /&gt;
Verifica la firma usando la clave pública en &amp;quot;filename&amp;quot;. En la salida puede salir: &amp;quot;Verification OK&amp;quot; o &amp;quot;Verification Failure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -signature filename&lt;br /&gt;
&lt;br /&gt;
Se introduce la firma a verificar en &amp;quot;filename&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -hmac key&lt;br /&gt;
&lt;br /&gt;
Crea un hash MAC usando &amp;quot;clave&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación, se realizarán ejemplos con las funciones de resúmenes más importantes:&lt;br /&gt;
&lt;br /&gt;
==== MD5 ====&lt;br /&gt;
&lt;br /&gt;
MD5 es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. Se trata de un algoritmo de reducción criptográfico de 128 bits (32 caracteres hexadecimales) ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash, plantea una serie de dudas acerca de su uso futuro. &amp;lt;ref&amp;gt;MD5. (2018, 11 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:43, noviembre 5, 2018 desde https://es.wikipedia.org/w/index.php?title=MD5&amp;amp;oldid=110565562.&amp;lt;/ref&amp;gt; Cabe destacar, que existe algoritmos anteriores pertenecientes a la familia MD5 como fueron MD1, MD2, MD3 y MD4. Aunque MD5 esté en desuso por sus vulnerabilidades, se debe conocer como funciona, ya que existen antiguos documentos que han usado este algoritmo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Se realizará el resumen del &amp;quot;texto.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -md5 texto.txt    &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MD5(texto.txt)= 1f669a0de621e1beb87baa527f6f1235&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SHA-1====&lt;br /&gt;
&lt;br /&gt;
SHA-1 ( Secure Hash Algorithm 1 ) es una función criptográfica de troceo que toma una entrada y produce un valor de hash de 160 bits (20 bytes) conocido como un resumen del mensaje , que generalmente se representa como un número hexadecimal , de 40 dígitos de longitud. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar de procesamiento de información federal de los Estados Unidos. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 28). SHA-1. In Wikipedia, The Free Encyclopedia. Retrieved 15:50, November 5, 2018, from https://en.wikipedia.org/w/index.php?title=SHA-1&amp;amp;oldid=866182340&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha1 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA1(texto.txt)= 50820e3061249bb5470aa558eeb3da769369a6e3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====SHA-2====&lt;br /&gt;
&lt;br /&gt;
SHA-2 es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA-384, SHA-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En 2005, se identificaron fallos de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática y evidenciando así la necesidad de elaborar una función hash más fuerte. Aunque el SHA-2 se comporta de forma parecida al algoritmo SHA-1, estos ataques no han sido extendidos satisfactoriamente a SHA-2. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. SHA-2 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=SHA-2&amp;amp;oldid=110395255&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA224 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 224 bits (28 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 56 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha224 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA224(texto.txt)= 6e911e52c586fb578608f582321eed909b9147569b824bc4eb79d785&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA256 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 256 bits (32 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 64 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA256(texto.txt)= 18bd46db70c25f5af60aeaf927754b9d212cadfaa650895631775de3bbb44114&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SHA384 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 384 bits (48 bytes) conocido como un resumen de mensaje , que generalmente se representa como un número hexadecimal , de 96 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha384 texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA384(texto.txt)= 5d52867897694aacb4cc9055ea004819d598db736ae86e08980950de1f09a05d4428ec87289191276235c551f6597b22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA-512 =====&lt;br /&gt;
&lt;br /&gt;
Produce un valor de hash de 512 bits (64 bytes) conocido como un resumen de mensaje, que generalmente se representa como un número hexadecimal , de 128 dígitos de longitud.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha512 texto.txt  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA512(texto.txt)= d05dda99543ca29ec4b9ad2f4b7049c09934ecff527a28a42f88d2bf968a80bdd18c88983ff67bb87a79b3494395702371d8cee0e31127b73252227f39898bf8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SHA-3 ====&lt;br /&gt;
&lt;br /&gt;
SHA-3 ( Secure Hash Algorithm 3 ) es el último miembro de la familia de estándares de Secure Hash Algorithm , publicado por NIST el 5 de agosto de 2015. SHA-3 es un posible sustituto del SHA-2 si se descubre alguna vulnerabilidad en éste último. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 4 de noviembre). SHA-3. En Wikipedia, la Enciclopedia Libre . Consultado a las 17:27, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=SHA-3&amp;amp;oldid=867303479&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genera diferentes longitudes de resumen como SHA-2. En este caso usaremos solamente SHA3-384 y SHA3-512.&lt;br /&gt;
&lt;br /&gt;
=====SHA3-384 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-384 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-384(texto.txt)= 3e0c626b47f8b9a41b975913801b6076bd8f737483b6b4b14c72f80e701b77f653cebf46a5ade8f9dbe876c7043d829e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como prueba, se procederá a modificar el &amp;quot;texto.txt&amp;quot; solamente borrando una letra. Se observará que el resultado será totalmente diferente al anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SHA3-384(texto.txt)= 51e8b14f1c0eaae57d83445eb41d42ef730340d1880d30fb81a8660a12559c3072880d855273996aca33d75f006595a6&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====SHA3-512 =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se realizará un resumen del &amp;quot;texto.txt&amp;quot;, el cuál hemos usado en los ejemplos anteriores.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  openssl dgst -sha3-512 texto.txt   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA3-512(texto.txt)= 47689e88171715227d8c5dbb48eed6e45ca969dc25895da01eb0b63933dd0363d2671f3e486236c5af2e711f9a003d1f4e6c1beddf6644f0bcaed9b8b80df967&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAC (Message authentication code)===&lt;br /&gt;
En criptografía , un código de autenticación de mensaje (MAC), es una información breve que se utiliza para autenticar un mensaje; en otras palabras, para confirmar que el mensaje proviene del remitente indicado (su autenticidad) y que el mensaje no haya sido alterado. Los valores MAC se calculan mediante la aplicación de una función hash criptográfica con clave secreta K, que sólo conocen el remitente y destinatario, pero no los atacantes. El valor MAC protege tanto la integridad de los datos de un mensaje como su autenticidad , al permitir que los verificadores (que también poseen la clave secreta) detecten cualquier cambio en el contenido del mensaje. Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones criptográficas hash (como en el caso de HMAC ). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 18 de octubre). Código de autenticación de mensaje. En Wikipedia, la Enciclopedia Libre . Consultado el 12:59, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Message_authentication_code&amp;amp;oldid=864554738&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipos de MAC ====&lt;br /&gt;
&lt;br /&gt;
==== HMAC (hash-based message authentication code) ====&lt;br /&gt;
&lt;br /&gt;
HMAC (a veces entendido como código de autenticación de mensaje hash con clave o código de autenticación de mensaje basado en hash ) es un tipo específico de código de autenticación de mensaje (MAC) que incluye una función de hash criptográfica y una clave criptográfica secreta . Puede usarse para verificar simultáneamente la integridad de los datos y la autenticación de un mensaje , como con cualquier MAC. Cualquier función hash criptográfica, como SHA256 o SHA-3, puede ser utilizado en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3). La fuerza criptográfica de la HMAC depende de la fuerza criptográfica de la función hash subyacente, el tamaño de su salida de hash y el tamaño y la calidad de la clave. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 26 de octubre). HMAC. En Wikipedia, la Enciclopedia Libre . Consultado a las 13:00, 3 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=HMAC&amp;amp;oldid=865863320&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se procede a obtener el HMAC del &amp;quot;texto.txt&amp;quot; usando una contraseña específica (&amp;quot;control1995&amp;quot;). Para ello, se utilizará la función hash &amp;quot;sha-512&amp;quot; como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -hmac-sha512 &amp;quot;control1995&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 62ad3592dbdfc00ce70f16228e66884e82468b94ac18ab44ae6fcaa5b3c39a4c0f94e57d87b2fc7cfba18616081d245858f474944252e1eb6beec2362bf67862&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar que si se cambia la contraseña se produce un HMAC diferente, se repetirá el mismo paso acortando la contraseña anterior.&lt;br /&gt;
&lt;br /&gt;
; Paso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -hmac &amp;quot;control&amp;quot; texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HMAC-SHA512(texto.txt)= 0c89913b70372eb77dd0631133275becce14459d57de0e1144d92b3fdba350cb9e9ba5af4eff62469419eb726e722e8e96547fcf3235c63fb55dcfdb8df6fc83&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Como conclusión''': para un mismo texto plano, dará un resultado diferente si la contraseña también es diferente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Simétrica ==&lt;br /&gt;
&lt;br /&gt;
La criptografía de clave simétrica, también llamada criptografía de clave secreta, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes en el emisor y el receptor. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave. &amp;lt;ref&amp;gt; Criptografía simétrica. (2018, 3 de julio). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:08, octubre 11, 2018 desde https://es.wikipedia.org/w/index.php?title=Criptograf%C3%ADa_sim%C3%A9trica&amp;amp;oldid=109083984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque existan algoritmos que vayan siendo desechados por las vulnerabilidades que se van descubriendo, no se pueden dejar de lado, ya que existen documentos anteriores cifrados con estos algoritmos y se necesita conocer su contenido. Con el paso del tiempo, estos documentos irán desapareciendo, siendo reemplazados por algoritmos más seguros y fiables.&lt;br /&gt;
&lt;br /&gt;
Para proceder a cifrar o descifrar mensajes se hará uso del comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt;. Se utiliza tanto para cifrados de bloque como de flujo, haciendo uso de claves basadas en contraseñas o claves proporcionadas explícitamente (clave y vector).&lt;br /&gt;
&lt;br /&gt;
También destacar que, cuando una contraseña  se emplea como clave de cifrado, un sistema bien diseñado la pasa primero por un algoritmo de derivación de claves como el PBKDF2 (explicado en las &amp;quot;opciones de enc&amp;quot;)&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Clave (criptografía) [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de diciembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Clave_(criptograf%C3%ADa)&amp;amp;oldid=107769781&amp;gt;.&amp;lt;/ref&amp;gt;. Asimismo, se agrega al hash  que usa la función de derivación unos dígitos aleatorios al que llamamos sal. Esto permite que para una misma contraseña, se generen distintas claves. &lt;br /&gt;
&lt;br /&gt;
A continuación, se muestra algunas de las opciones más importantes que nos permite realizar el comando &amp;lt;tt&amp;gt;-enc&amp;lt;/tt&amp;gt; y de las cuáles se harán uso durante el desarrollo de los ejemplos. Hay que tener en cuenta, que en algunos ejemplos se usan comandos donde la contraseña aparece explícita y es muy peligroso. Por ello, se desaconseja el uso de dichos comandos aunque en esta wiki se use para fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Comando enc'''''&lt;br /&gt;
&lt;br /&gt;
; -in ''filename'': Se introduce el fichero que se quiere cifrar.&lt;br /&gt;
&lt;br /&gt;
; -out ''filename'': Se escribe el nombre del fichero de salida que contendrá el texto cifrado.&lt;br /&gt;
&lt;br /&gt;
; -e: Para cifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -d: Para descifrar el fichero de entrada.&lt;br /&gt;
&lt;br /&gt;
; -a: Para cifrar el fichero de entrada en Base64.&lt;br /&gt;
&lt;br /&gt;
; -k ''password'': Para especificar una contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''pass: password''.&lt;br /&gt;
&lt;br /&gt;
; -kfile ''filename'': Fichero que contiene la contraseña (en desuso). Su equivalente y el que se recomienda usar a día de hoy es -pass ''file''.&lt;br /&gt;
&lt;br /&gt;
; -pass ''pass: password'': Igual que &amp;quot;-k ''password''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -pass ''file'': Igual que &amp;quot;-kfile ''filename''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; -p: Cifra e imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -P: No cifra, simplemente imprime la clave, el vector de inicialización y el valor de sal.&lt;br /&gt;
&lt;br /&gt;
; -K ''key'': Se proporciona la clave real directamente. Siempre que se introduce la clave, obligatoriamente se introduce el vector de inicialización (-iv IV).&lt;br /&gt;
&lt;br /&gt;
; -iter ''count'': Utilice un número dado de iteraciones en la contraseña para derivar la clave de cifrado. Los valores altos aumentan el tiempo requerido para forzar el archivo resultante. Esta opción permite el uso del algoritmo PBKDF2 para derivar la clave.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf1: Leer -pbkdf2. Tiene la misma funcionalidad que su sucesor pero con la diferencia de que este último tiene capacidad para generar claves de más de 160 bits (128, 256, 512 bits). Hay que tener en cuenta que si se usa una de las dos versiones a la hora del cifrado, se tiene que usar la misma función para el descifrado, ya que no son compatibles. Por ello, cuando se mande un documento cifrado, hay que saber cuál de las dos versiones se han usado. Aunque ''-pbkdf1'' está en desuso, hay que conocerla debido a que existen documentos antiguos cifrados con ella.&lt;br /&gt;
&lt;br /&gt;
; -pbkdf2: Usar algoritmo PBKDF2 con el número de iteraciones predeterminado al no ser que diga lo contrario. PBKDF2 aplica una función pseudoaleatoria (HMAC con cualquier función hash aprobada: HMAC-SHA1) a la contraseña de entrada o frase de contraseña junto con un valor de sal y repite el proceso muchas veces (mínimo se recomienda 1000 iteraciones) para producir una clave derivada, que luego se puede usar como una clave criptográfica en operaciones posteriores. El trabajo computacional agregado hace que el craqueo de contraseñas sea mucho más difícil. La norma recomienda una longitud de sal de al menos 64 bits.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 27 de octubre). PBKDF2. En Wikipedia, la Enciclopedia Libre . Obtenido 18:55, 1 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=PBKDF2&amp;amp;oldid=866007861&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; -md ''messagedigest'' : especifica el resumen del mensaje que se utiliza para la derivación de clave. Puede tomar uno de los valores md2 , md5 , sha o sha1 . El algoritmo predeterminado es sha-256. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. OpenSSL Wiki [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 17 de diciembre del 2018]. Disponible en &amp;lt;https://wiki.openssl.org/index.php/Main_Page&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de empezar con algunos ejemplos de los algoritmos más relevantes de cifrado simétrico, hay que entender que existen diferentes métodos de cifrado que usan a su vez, diferentes modos de operaciones.&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Bloque ===&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Cifrado por bloques.png|250px|thumb|Cifrado por bloques.]]&lt;br /&gt;
&lt;br /&gt;
En criptografía, una unidad de cifrado por bloques (en inglés, block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando se realiza el cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. &lt;br /&gt;
La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 24 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un concepto importante en el cifrado por bloques es el '''''Padding'''''. Se trata de un esquema de relleno necesario que usan algunos modos de operación de cifrado en bloque para completar los mensajes que no tengan una longitud múltiplo del tamaño de bloque. &lt;br /&gt;
&lt;br /&gt;
Otra idea que cabe destacar, es el '''''vector de inicialización''''' o '''''IV'''''. El IV es un bloque de bits que es requerido para permitir un cifrado en flujo o un cifrado por bloques, en uno de los modos de cifrado''', con un resultado independiente de otros cifrados producidos por la misma clave.''' El tamaño del IV dependen del algoritmo de cifrado y del protocolo criptográfico y a menudo es tan largo como el tamaño de bloque o como el tamaño de la clave. Habitualmente el IV se genera de forma aleatoria o pseudoaleatoria al mismo tiempo que la clave de cifrado (por empleo de funciones del tipo PBKDF2). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Vector de inicialización [en línea]. Wikipedia, La enciclopedia libre, 2015 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Vector_de_inicializaci%C3%B3n&amp;amp;oldid=79449760&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modos de Operación para Cifrado en Bloque====&lt;br /&gt;
&lt;br /&gt;
Los métodos que usaremos son:&lt;br /&gt;
&lt;br /&gt;
* ECB (Electronic CodeBook): Este modo de cifrado es el más simple de todos, pues se limita a partir el mensaje en bloques y cifrarlos por separado. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:ECB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:ECB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
La desventaja de este método es que bloques idénticos de mensaje sin cifrar producirán idénticos textos cifrados, mientras que al resto de modos de operación no les ocurre esta situación porque combinan bloques anteriores de texto claro o cifrado de tal modo que idénticos bloques de texto claro producirán bloques diferentes de texto cifrado. Esto explica la necesidad del vector de inicialización (IV) para enmascarar el primer bloque.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tux.jpg|mode=&amp;quot;traditional&amp;quot;|Imagen original&lt;br /&gt;
File:Tux ecb.jpg|mode=&amp;quot;traditional&amp;quot;|Cifrado usando el modo ECB&lt;br /&gt;
File:Tux secure.jpg|mode=&amp;quot;traditional&amp;quot;|Usando otros modos de operación más seguros&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CBC (Cipher Block Chaining): El modo de cifrado CBC divide el mensaje en bloques y usa XOR para combinar el cifrado del bloque anterior con el texto plano del bloque actual. Como no se dispone de un texto cifrado con el que combinar el primer bloque, se genera un vector de inicialización que cambia aleatoriamente cada vez que se empieza un cifrado desde 0. &amp;lt;ref&amp;gt;Colaboradores del Blog de Daniel Lerch. Modos de cifrado: ECB, CBC, CTR, OFB y CFB. [en línea]. El Blog de Daniel Lerch, 2007 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;http://dlerch.blogspot.com/2007/07/modos-de-cifrado-ecb-cbc-ctr-ofb-y-cfb.html&amp;gt;&amp;lt;/ref&amp;gt; Tanto en los modos de operación ECB y CBC, el último bloque de texto debe ser rellenado (paddding) antes del proceso de cifrado, ya que las dimensiones de los mensajes son variables y el cifrador en bloque opera con bloques de tamaño fijo. &lt;br /&gt;
&lt;br /&gt;
[[File:CBC encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CBC decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
====Modos de Operación para Cifrado en Flujo====&lt;br /&gt;
&lt;br /&gt;
Aunque los modos de operación CFB, OFB y CTR se consideren modos de operación para un cifrado en bloque, posee algunas características propias de un cifrado en flujo. Por ello, los englobamos en este apartado.&lt;br /&gt;
&lt;br /&gt;
* CFB (Cipher FeedBack): el modo de retroalimentación de cifrado (CFB), un pariente cercano de CBC, convierte un cifrado de bloque en un cifrado de flujo. La operación es muy similar; en particular, el descifrado CFB es casi idéntico al cifrado CBC realizado a la inversa y que además, evita el rellenado de bloques. &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, October 16). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 17:43, October 25, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=864354561&amp;lt;/ref&amp;gt; Por tanto, hace que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrado_por_bloques&amp;amp;oldid=105539415&amp;gt;.&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:CFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* OFB (Output FeedBack): emplea una clave para crear un bloque pseudoaleatorio que es operado a través de XOR con el texto claro para generar el texto cifrado. Requiere de un vector de inicialización que debe ser único para cada ejecución realizada. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Modos de operación de una unidad de cifrado por bloques [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Modos_de_operaci%C3%B3n_de_una_unidad_de_cifrado_por_bloques&amp;amp;oldid=108270945&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:OFB encryption.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:OFB decryption.svg]]&lt;br /&gt;
&lt;br /&gt;
* CTR (Counter): genera el siguiente bloque pseudoaleatorio cifrando valores sucesivos de un &amp;quot;contador&amp;quot;. El contador puede ser cualquier función que produzca una secuencia que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y el más popular. Si el IV / nonce es aleatorio, entonces pueden combinarse con el contador utilizando cualquier operación sin pérdida (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. &amp;lt;ref&amp;gt; Wikipedia contributors. (2018, October 30). Block cipher mode of operation. In Wikipedia, The Free Encyclopedia. Retrieved 19:21, November 2, 2018, from https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&amp;amp;oldid=866522235&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CTR encryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
[[File:CTR decryption 2.svg]]&lt;br /&gt;
&lt;br /&gt;
===Cifrado en Flujo ===&lt;br /&gt;
&lt;br /&gt;
[[Image:A5-1 GSM cipher.svg|280px|thumbnail|&lt;br /&gt;
La operación del generador de flujo de clave en A5 / 1 , un cifrado de flujo basado en LFSR utilizado para cifrar conversaciones de teléfono móvil.]]&lt;br /&gt;
&lt;br /&gt;
Para algunas aplicaciones, tales como el cifrado de conversaciones telefónicas, el cifrado en bloques es inapropiada porque los flujos de datos se producen en tiempo real en pequeños fragmentos. Las muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1 bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar y transmitirlos. Los cifradores de flujo son algoritmos de cifrado que pueden realizar el cifrado incrementalmente, convirtiendo el texto en claro, en texto cifrado bit a bit, es decir, cada dígito de texto sin formato se cifra uno a la vez con el dígito correspondiente de la secuencia pseudoaleatoria, para dar un dígito del flujo de texto cifrado. Una secuencia pseudoaleatoria es una secuencia de bits de tamaño arbitrario que puede emplearse para oscurecer los contenidos de un flujo de datos combinando esta secuencia con el flujo de datos mediante la función XOR. Si la secuencia pseudoaleatoria es segura, el flujo de datos cifrados también lo será. Los bloques se cifran empleando una clave compartida por el emisor y el receptor. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Cifrador de flujo [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 25 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Cifrador_de_flujo&amp;amp;oldid=94383885&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los algoritmos de flujo más importantes es el RC4, aunque existen nuevos algoritmos de cifrado más eficientes como el Chacha20 y los modos de operación en flujo de cifradores de bloque como AES. &lt;br /&gt;
&lt;br /&gt;
===Algoritmos de cifrado ===&lt;br /&gt;
&lt;br /&gt;
==== DES (Data Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
DES es el algoritmo prototipo del cifrado por bloques — un algoritmo que toma un texto en claro de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro texto cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. DES utiliza también una clave criptográfica para modificar la transformación, de modo que el descifrado sólo puede ser realizado por aquellos que conozcan la clave concreta utilizada en el cifrado. La clave mide 64 bits, aunque en realidad, sólo 56 de ellos son empleados por el algoritmo. Los ocho bits restantes se utilizan únicamente para comprobar la paridad, y después son descartados. Por tanto, la longitud de clave efectiva en DES es de 56 bits, y así es como se suele especificar. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Data Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 12 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Data_Encryption_Standard&amp;amp;oldid=109510549&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este algoritmo es considerado no seguro, ya que su tamaño de clave de 56 bits es corto y con ello, han habido casos en que las claves de DES se han roto en un día. Más adelante, se verá una variante de este algoritmo considerado más seguro como es el Triple DES.&lt;br /&gt;
&lt;br /&gt;
===== DES - ECB =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se crea un ''texto.txt'' con un texto cualquiera que usaremos tanto para este ejemplo como para el resto del documento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Una manera de cifrar un fichero es ejecutando el comando que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ecb -a -in texto.txt -out des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se tendrá que introducir una contraseña, la cuál se usará tanto para cifrar como descifrar. Además, el resultado estará en base 64 utilizando la función &amp;quot;-a&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ecb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19kW3Tq3F0Sh9ELdcdlloEOs1pJsOG24MuvuOBPfvaHE/nK0iBtb9F1&lt;br /&gt;
HlxZw5Whn+eAXXABg/d9DjXnl0pRKjpheO4pP9rPug0=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (Se usa &amp;quot;-d&amp;quot; para indicar que se va a descifrar el fichero de entrada y si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ecb -d -a -in des_ecb.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== DES - CBC =====&lt;br /&gt;
&lt;br /&gt;
Si se pone solo &amp;quot;-des&amp;quot; sin modo de operación, por defecto usará el modo de operación &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' proporcionando la contraseña en la misma línea de comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-cbc -a -k luna77 -in texto.txt -out des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso no se tendrá que introducir ninguna contraseña, ya que se ha proporcionado al ejecutar el comando anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX18ASWAnYV+LYwjtb8A0jTXXaFYXI9BEtMSyUXPCXmhNrHtC6LFg3+WG&lt;br /&gt;
QFcXPAWb/ptzZV2lNBkFNrgnlabYRunACGZ3mJSS/xU=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Se descifra el fichero que se ha cifrado antes de la siguiente manera (si se desea se ejecuta un ''cat'' del fichero de salida para verificar el resultado):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-cbc -d -a -k luna77 -in des_cbc.cif -out texto_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TRIPLE DES ====&lt;br /&gt;
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, fue desarrollado por IBM en 1998. El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y a la fecha no se ha encontrado ninguna vulnerabilidad &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Triple DES [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 13 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Triple_DES&amp;amp;oldid=107652683&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TDES usa una longitud de 168 bits (3x56) aunque realmente su eficiencia es de 112 bits, es decir, dobla la longitud de clave de DES. Por ello, TDES no se considera vulnerable a los ataques por fuerza bruta, al contrario que su antecesor que poseía una longitud de clave corta. Además, se continúa cifrando bloques de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de TDES, aunque el más utilizado es el EDE3 (Encrypt-Decrypt-Encrypt). Es decir, el cifrado se aplica al contenido mediante la clave 1, luego este texto cifrado se descifra con la clave 2 y finalmente, el texto descifrado se vuelve a cifrar con la clave 2. &lt;br /&gt;
===== DES - EDE3 - CFB =====&lt;br /&gt;
&lt;br /&gt;
El 'salt' es una cadena aleatoria de 8 bytes que se almacena con el archivo cifrado para que cada vez que cifre un archivo con una contraseña específica el archivo resultante será diferente. La sal está activada siempre por defecto. &lt;br /&gt;
&lt;br /&gt;
La sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. &lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que si ciframos el contenido de un fichero con una contraseña, la sal se identifica por el encabezado de 8 bytes ( Salted__ ), seguido por la sal de 8 bytes. Si solo se usa la clave y el IV directamente, no es necesario especificar el '''salt''' y por tanto, no se usará dicho encabezado de 16 bytes. Como conclusión, si se cifra con una contraseña y luego se  usa la clave y el IV para el descifrado, se deberá quitar los primeros 16 bytes antes de descifrarlos correspondientes con el encabezado y la sal.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
En este caso cifraremos el ''texto.txt'' de manera que se solicite la contraseña y se muestre la sal, la clave y el vector de inicialización:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-cfb -p -in texto.txt -out des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D30F902E2A9DCF99&lt;br /&gt;
key=6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD&lt;br /&gt;
iv =DFDBFE410F5BD79A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros. Pero en este ejemplo usaremos tanto la clave (key) como el vector de inicialización (IV) para el descifrado.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des_ede3_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__??.*?ϙg?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Al usar la clave y la sal para descifrar el fichero, se tiene que primero extraer la sal como se indica a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat des_ede3_cfb.cif | dd ibs=16 obs=16 skip=1 &amp;gt; des_ede3_cfb_sinsal.cif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat des_ede3_cfb_sinsal.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
g?W:?ç?PX3?	u&lt;br /&gt;
&amp;amp;?Qxo9?*u?&lt;br /&gt;
          ?h???9???3y&lt;br /&gt;
                     	R\Z??H?&amp;quot;?t?5&amp;quot;?x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al comparar este fichero con el fichero ''des_ede3_cfb.cif'', se observa que se han eliminado parte de los bytes correspondientes a la sal (16 primeros bytes).&lt;br /&gt;
&lt;br /&gt;
;Paso 5:&lt;br /&gt;
&lt;br /&gt;
Para descifrar, se hará uso de la clave y la sal obtenida en el primer paso:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 5) openssl enc -des-ede3-cfb -d -in des_ede3_cfb_sinsal.cif -out texto_desc.txt -K 6581AB49BC17A188D8E2BE8C547734F568F78DDAA6442CCD -iv DFDBFE410F5BD79A  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
===== DES - EDE3 - OFB =====&lt;br /&gt;
&lt;br /&gt;
Anteriormente se ha usado el comando ''-k'' para introducir la contraseña directamente pero cada vez se usa menos. Su equivalente y el que se recomienda usar a día de hoy es ''-pass pass:password'' cuya función es la misma que la anterior.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' usando el comando nombrado en la descripción de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -des-ede3-ofb -a -pass pass:prueba+1 -in texto.txt -out des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al introducir la contraseña ''prueba+1'' arriba, no se pedirá introducir contraseña alguna al ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat des-ede3.ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1807oH+u4mohMA8SHgqVU+GjyJQppx51rPbRt/IINW3PftAC6Y9v1vx&lt;br /&gt;
CR4T73xtuUP5boyWMqjWKQKQer3rWlDdzoeBpYEM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se puede hacer de dos formas. Una de ellas es introducir directamente la contraseña como se ha hecho para cifrar, o introducirla después de ejecutar el comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -pass pass:prueba+1 -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''o'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -des-ede3-ofb -d -a -in des-ede3.ofb.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter des-ede3-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede verificar que de las dos formas se puede descifrar correctamente el fichero cifrado.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== AES (Advanced Encryption Standard) ====&lt;br /&gt;
&lt;br /&gt;
AES, también conocido como Rijndael (pronunciado &amp;quot;Rain Doll&amp;quot; en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica. El cifrado fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y fue enviado al proceso de selección AES bajo el nombre &amp;quot;Rijndael&amp;quot;.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Advanced Encryption Standard [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Advanced_Encryption_Standard&amp;amp;oldid=110119865&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basado en la estructura de bloques de AES, el cambio de un solo bit, ya sea en la clave, o en el bloque de texto sin cifrado, da como resultado un bloque de texto cifrado completamente diferente &amp;lt;ref&amp;gt;Colaboradores de Boxcryptor. Cifrado AES y RSA [en línea]. Boxcryptor [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://www.boxcryptor.com/es/encryption/&amp;gt;.&amp;lt;/ref&amp;gt;. Este algoritmo tiene una longitud de bloque de 128 bits y longitudes de clave de 128, 192 y 256.&lt;br /&gt;
&lt;br /&gt;
Se trata de un algoritmo del que todavía no se ha registrado ningún ataque factible hacia él, convirtiéndose en un estándar de cifrado para las principales organizaciones como bancos, gobiernos y sistemas de alta seguridad en todo el mundo. Además, es un estándar mucho más rápido que los vistos anteriormente.&lt;br /&gt;
&lt;br /&gt;
===== aes - 128 - cbc =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este caso se cifrará el ''texto.txt'' de manera que se muestre la sal, la clave y el vector de inicialización para poder observar como varía la ''key'' según el tamaño de clave utilizada(128, 192 o 256 bits). &lt;br /&gt;
&lt;br /&gt;
De la misma manera con la que hemos descifrado en DES - EDE3 - CFB , se podría hacer con AES. En este caso, solo mostraremos la sal, la clave y el vector de inicialización con fines didácticos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-128-cbc -p -in texto.txt -out aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=D4CB02846DF52631&lt;br /&gt;
key=E0F912BD4D46C5E051C0E8AB296C087A&lt;br /&gt;
iv =F63249B4C246608579EEC44996AEAD7E&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso se tendrá que introducir una contraseña con la que se cifrará y descifrará los ficheros.&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_128_cbc.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Salted__???m?&amp;amp;1???o?~#??[A????6??S(?r+?O?l M&amp;lt;0????{????H???h??(m?!?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar el fichero lo hacemos directamente sin necesidad de extraer la sal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -d -aes-128-cbc -in aes_128_cbc.cif -out aes_128_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-128-cbc decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4&lt;br /&gt;
Verificamos que el descifrado se ha hecho correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 4) cat aes_128_desc.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si no se especifica el modo de operación, por defecto se usará &amp;quot;cbc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 192 - cfb =====&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-192-cfb -p -pbkdf2 -md sha1 -pass file:passwd.txt -in texto.txt -out aes_192_cfb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
salt=B80C38A686E22ABF&lt;br /&gt;
key=2D638C6CA5092F3313EB4E8F3CF45790D1F3298F66068151&lt;br /&gt;
iv =B1E385CBD9DA80579F6FB37F5528C8BB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede observar que el tamaño de la clave tiene mayor longitud que la de 128 bits, al igual que el vector de inicialización.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para descifrar se haría de la misma manera que en DES - EDE3 - CFB añadiendo los comandos nuevos &amp;quot;-pbkdf2&amp;quot; y &amp;quot;-md sha1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== aes - 256 - ofb =====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo usaremos la misma función que antes para introducir la contraseña desde un archivo pero a la hora de descifrar tendremos que introducir la contraseña a mano. De esta forma, se podrá verificar que la contraseña del archivo equivale a ponerla manualmente y con el mismo resultado. &lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se va a cifrar el ''texto.txt'' como en el ejemplo anterior, pero usando ''-pass: file:filename''. El ''filename'' corresponde con el archivo que contiene la contraseña, en este ejemplo el fichero se llamará &amp;quot;passwd.txt&amp;quot;. Además, se introducirá la función &amp;quot;-pbkdf2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -aes-256-ofb -a -pbkdf2 -pass file:passwd.txt -in texto.txt -out aes_256_ofb.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat aes_256_ofb.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+QVMdAUpGCvAwjUuRa5GuxggUJ4DFQB1RY9LcjP6RJnQJ+zvNcKidr&lt;br /&gt;
jPcbam7ESyfQqa9JRg/uL/F3KZvx7OFHThJwLNt9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que contiene el fichero que se utilizó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -aes-256-ofb -d -a -pbkdf2 -in aes_256_ofb.cif -out texto_des.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter aes-256-ofb decryption password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 4:&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) cat texto_des.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RC4 ====&lt;br /&gt;
&lt;br /&gt;
Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se usa en algunos de los protocolos más populares como Transport Layer Security (TLS/SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) (para añadir seguridad en las redes inalámbricas). RC4 fue excluido enseguida de los estándares de alta seguridad por los criptógrafos y algunos modos de usar el algoritmo de criptografía RC4 lo han llevado a ser un sistema de criptografía muy inseguro, incluyendo su uso WEP. No está recomendado su uso en los nuevos sistemas &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. RC4 [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 14 de octubre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=RC4&amp;amp;oldid=104650982&amp;gt;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Ahora se procederá a cifrar el fichero ''texto.txt'' pero usando un cifrado de flujo. Tendrá que introducir una contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -rc4 -a -pbkdf2 -in texto.txt -out rc4.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat rc4.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX1+NGFlYsDGIrvaeo21Gg7pkI+OD0ZjU7QzS97w7q5HP2xNnz7BxBew2&lt;br /&gt;
6tiHQXgAAfp7P0zZq+6PIBFRVEy61wU2wNg+tpVy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando y posteriormente introducimos la contraseña que se usó para el cifrado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3)openssl enc -rc4 -d -a -pbkdf2 -in rc4.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
==== Chacha20 ====&lt;br /&gt;
[[File:Salsa20 ChaCha variant.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Es un sistema de cifrado en flujo, que soporta claves de 128 y 256 bits y de alta velocidad creado por Bernstein en 2008. Salsa20 es el cifrado original creado también por Bernstein en 2007, el cuál mantiene una estrecha relación con su sucesor, ya que ambos cifrados se basan en una función pseudoaleatoria basada en operaciones add-rotate-xor (ARX). Salsa20 y ChaCha poseen la inusual ventaja de que el usuario puede buscar de manera eficiente cualquier posición en el flujo de claves en tiempo constante.  &lt;br /&gt;
&lt;br /&gt;
La principal diferencia entre ellos, es que Chacha20 ofrece un aumento de la difusión por ronda y logra ligeramente un mejor rendimiento. Además, se considera que en implantaciones software es más eficiente y rápido que AES.&lt;br /&gt;
&lt;br /&gt;
;Paso 1:&lt;br /&gt;
&lt;br /&gt;
Se cifra el ''texto.txt'' igual que antes pero usando la funcion ''-pass pass:password''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1) openssl enc -chacha20 -a -pbkdf2 -pass pass:informatica95 -in texto.txt -out chacha20.cif  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2:&lt;br /&gt;
&lt;br /&gt;
Para verificar que se ha cifrado el fichero correctamente se muestra el contenido del fichero de salida por la terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 2) cat chacha20.cif   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
U2FsdGVkX19A+Yp7zsXDMD/VDIsgYsdM5nxu037Ku0a8zlyCocLhq9G6t+UPSDug&lt;br /&gt;
N98wSwM0RPfBOUVyEKMk99hWwNFWKESgg0WCFLXi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3:&lt;br /&gt;
&lt;br /&gt;
Para descifrar ejecutamos el siguiente comando incluyendo la contraseña como se hizo para cifrar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; 3) openssl enc -chacha20 -d -a -pbkdf2 -pass pass:informatica95 -in chacha20.cif -out texto_desc.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar un ''cat'' del fichero de salida se podrá leer el texto original si se desea verificar que el descifrado se ha efectuado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Criptografía Asimétrica ==&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
En este apartado hablaremos de los distintos algoritmos de criptografía asimétrica más importantes, explicando sus conceptos básicos y posteriormente, en los siguientes apartados se realizarán las operaciones correspondientes con cada uno de ellos.&lt;br /&gt;
&lt;br /&gt;
Primero hablaremos del algoritmo RSA(Rivest, Shamir y Adleman), que es un sistema criptográfico de clave pública desarrollado en 1979. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se calculan a partir de un número que se obtiene como producto de dos primos grandes. &amp;lt;ref&amp;gt;RSA. (2018, 26 de octubre). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018 desde https://es.wikipedia.org/w/index.php?title=RSA&amp;amp;oldid=111566892.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Criptografía y Seguridad en Computadores. (2015, 5 de mayo). Wikipedia, La enciclopedia libre. Fecha de consulta: 17:31, noviembre 7, 2018.&amp;lt;/ref&amp;gt; Las claves RSA son normalmente de entre 1024-8192 bits de longitud, siendo el tamaño más usado actualmente de 2048 ó 4096 bits de longitud.&lt;br /&gt;
&lt;br /&gt;
Otro algoritmo que pertenece a la criptografía asimétrica es el DSA (Digital Signature Algorithm), un estándar del Gobierno Federal de los Estados Unidos de América o FIPS para firmas digitales. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. DSA [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 7 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=DSA&amp;amp;oldid=109487521&amp;gt;.&amp;lt;/ref&amp;gt; Además, los mensajes están firmados por la clave privada del firmante y las firmas son verificadas por la clave pública correspondiente del firmante . La firma digital proporciona autenticación de mensajes , integridad y no repudio . &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 22 de octubre). Algoritmo de firma digital. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:51, 7 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Digital_Signature_Algorithm&amp;amp;oldid=865188446&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También tenemos el algoritmo DH (Diffie-Hellman), un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro. El sistema se basa en la idea de que dos interlocutores pueden generar conjuntamente una clave compartida sin que un intruso, que esté escuchando las comunicaciones, pueda llegar a obtenerla. Para ello se eligen dos números públicos y, cada interlocutor, un número secreto. Usando una fórmula matemática, que incluye la exponenciación, cada interlocutor hace una serie de operaciones con los dos números públicos y su número secreto. A continuación los interlocutores se intercambian los resultados de forma pública. En teoría revertir esta función es tan difícil como calcular un logaritmo discreto. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. Diffie-Hellman [en línea]. Wikipedia, La enciclopedia libre, 2018 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=Diffie-Hellman&amp;amp;oldid=107390867&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La criptografía de curva elíptica (ECC) es una aproximación a la criptografía de clave pública basada en la estructura algebraica de las curvas elípticas sobre campos finitos. El principal beneficio prometido por la criptografía de curva elíptica es un tamaño de clave más pequeño, donde un grupo de curva elíptica podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo grande y una clave correspondientemente mayor como por ejemplo, una clave pública de curva elíptica de 256 bits debería proporcionar una seguridad comparable a una clave pública RSA de 3072 bits. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 6 de noviembre). Criptografía de curva elíptica. En Wikipedia, la Enciclopedia Libre . Consultado a las 18:13, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Elliptic-curve_cryptography&amp;amp;oldid=867536222&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por un lado existe una modificación del algoritmo DSA, llamada ECDSA (Elliptic Curve Digital Signature Algorithm), que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA. La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA.&amp;lt;ref&amp;gt;Colaboradores de Wikipedia. ECDSA [en línea]. Wikipedia, La enciclopedia libre, 2017 [fecha de consulta: 15 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=ECDSA&amp;amp;oldid=96631617&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, también existe una modificación del algoritmo DH, ECDH (Elliptic-curve Diffie–Hellman), un protocolo de acuerdo de clave anónimo que permite a dos partes, cada una con un par de clave pública-privada de curva elíptica, establecer un secreto compartido sobre un canal inseguro. Dicho secreto, es un dato conocido solo por las partes involucradas, que puede ser una contraseña. &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. (2018, 10 de octubre). Secreto compartido. En Wikipedia, la Enciclopedia Libre . Recuperado 18:21, 15 de noviembre de 2018, de https://en.wikipedia.org/w/index.php?title=Shared_secret&amp;amp;oldid=863386628&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, April 12). Elliptic-curve Diffie–Hellman. In Wikipedia, The Free Encyclopedia. Retrieved 18:22, November 15, 2018, from https://en.wikipedia.org/w/index.php?title=Elliptic-curve_Diffie%E2%80%93Hellman&amp;amp;oldid=836070673&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.&lt;br /&gt;
&lt;br /&gt;
=== Generación de Claves Asimétricas ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, hay que tener claro que comandos son los más importantes y actualizados para realizar las operaciones correspondientes a cada algoritmos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genpkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando genpkey genera una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -genparam&lt;br /&gt;
&lt;br /&gt;
Genera un conjunto de parámetros en lugar de una clave privada. Si se utiliza, esta opción debe preceder a cualquier opción de algoritmo (-algorithm alg).&lt;br /&gt;
&lt;br /&gt;
; -paramfile filename&lt;br /&gt;
&lt;br /&gt;
Algunos algoritmos de clave pública generan una clave privada basada en un conjunto de parámetros como por ejemplo . Se pueden suministrar utilizando esta opción.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Con este comando se puede especificar el número de bits de clave pública que se va generar usando un determinado algoritmo.&lt;br /&gt;
&lt;br /&gt;
; -algorithm alg&lt;br /&gt;
&lt;br /&gt;
Algoritmo de clave pública para usar como RSA, DSA o DH. Si se usa esta opción debe preceder a cualquier opción -pkeyopt.&lt;br /&gt;
&lt;br /&gt;
; -outform DER | PEM&lt;br /&gt;
&lt;br /&gt;
Especifica el formato de salida DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Archivo de salida generado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkey'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación tanto de claves públicas como privadas. Por ejemplo, para extraer la clave pública de la clave privada.&lt;br /&gt;
&lt;br /&gt;
; -inform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de entrada DER o PEM. El formato predeterminado es PEM.&lt;br /&gt;
&lt;br /&gt;
; -outform DER|PEM&lt;br /&gt;
&lt;br /&gt;
Esto especifica el formato de salida.&lt;br /&gt;
&lt;br /&gt;
; -in filename &lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de entrada.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Esto especifica el nombre del archivo de salida para escribir una clave&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
Por defecto, se lee una clave privada del archivo de entrada: con esta opción, se lee una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
; -pubout&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, se genera una clave privada: con esta opción, se generará una clave pública en su lugar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''pkeyutl'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se usa para realizar operaciones de clave pública utilizando cualquier algoritmo compatible. &lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de entrada&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
Especifica el nombre del archivo de salida&lt;br /&gt;
&lt;br /&gt;
; -inkey file&lt;br /&gt;
&lt;br /&gt;
Archivo que por defecto debería ser una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -pubin&lt;br /&gt;
&lt;br /&gt;
El archivo de entrada es una clave pública.&lt;br /&gt;
&lt;br /&gt;
; -sigfile file&lt;br /&gt;
&lt;br /&gt;
Archivo de firma, requerido solo para verificar operaciones.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firma el fichero de entrada. Se requiere de una clave privada.&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifra los datos de entrada.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifra los datos de entrada&lt;br /&gt;
&lt;br /&gt;
; -derive&lt;br /&gt;
&lt;br /&gt;
Deriva un secreto compartido usando un par de claves.&lt;br /&gt;
&lt;br /&gt;
; -peerkey file&lt;br /&gt;
&lt;br /&gt;
El archivo donde se encuentra la clave pública del otro usuario, utilizado por las operaciones de derivación de claves.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verifica los datos de entrada (que deben ser un hash) comparándolos con el archivo de firma e indica si la verificación se realizó correctamente o no.&lt;br /&gt;
&lt;br /&gt;
; -pkeyopt opt value&lt;br /&gt;
&lt;br /&gt;
Opciones de clave pública especificadas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''genrsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comando para generar una clave privada RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''rsa'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para la manipulación de claves RSA. Este comando queda obsoleto y se utiliza '''&amp;quot;pkey&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''dsaparam'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se utiliza para manipular o generar archivos de parámetros DSA. Este comando queda obsoleto y se utiliza '''&amp;quot;genpkey -genparam&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
A partir de estos comandos, podremos comenzar a realizar ejemplos con los diferentes algoritmos nombrados anteriormente.&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas RSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se crea el par de claves (pública y privada) en un fichero que se llamará &amp;quot;privadoRSA.pem&amp;quot; cifrado con AES256. Además, estará en formato PEM (formato de archivo empleado para almacenar certificados digitales).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm RSA -aes256 -out privadoRSA.pem -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.............................................................................................................+++++&lt;br /&gt;
.......................................................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar un par de claves RSA sería la siguiente (obsoleto): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genrsa -aes256 -out privadoRSA.pem 2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzgqJ6uIcHCUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqkESJ+5bfHBdYvwTZFGW3BIIE&lt;br /&gt;
0LskJiiJAihpTJCsEOPKMqTh6r+XyNQTAoVtkKQ31d63dbe2vpIP7RfCNYNCcDRQ&lt;br /&gt;
Vyqpt/YN83ltkQ46tuh68NzyT2oUa/LS5I34xj9ABI7CLD2XqQWZ6kTPakgRYaKb&lt;br /&gt;
WwEV0WhXCFLkiX+kAHWX+LcfR9s/DyCRpNzxwBjJAvysolhWx0gBjc0R5aEOtQqt&lt;br /&gt;
E5ErEcsYX+iPJUMIEVtrKy3PIB9doqGlSG45ZFC8NSu8tDizrBvVicbnT/2jsJb5&lt;br /&gt;
IThcfIEQZp9X31tRN/OmnxARhNtRn2YW+9/dTBOlLXPJ/Ikdm0kx6JHMbfw/hH8S&lt;br /&gt;
+3HP7p5W5wGe6xwhAb1soD3ZPXDpu76zTLmv4IoXu2kuamNNNGUqpDDG3OT54QsR&lt;br /&gt;
dtBn8jUhR+niWB2uBGSZ902+Ru+VY0M42SjVYAb83EoAB86HyG6XAKmJRBmzXZfh&lt;br /&gt;
Qmk8svfC1n6+7vv5MUaqTTRsqeTwGu4jenOTEVjHUyKQamMak4F83oV/4wFsuK5V&lt;br /&gt;
y7VfVv3DkCy9/CJVdmS3ZHc4V5D741VLc8keNKhH17rShbNHE+lFlrLzA7YwRdw4&lt;br /&gt;
lpEbaoLxzjz/yB2LKjoWRbngpxcB7/qz1NkObm3S2ROWcRDi5hNHEc0ctlT0kuXi&lt;br /&gt;
KSG6Sqlald9bast1zmMpIpvvfKVG3moq2umVR1B2JhwYRmdKEsJ7NjioI7pmuZc4&lt;br /&gt;
fr485I1SDBGjhSmsQAdUq5b7aljCbgrSLjHYFVxWLOutfhE1P3E7sgiUWlQmvZWP&lt;br /&gt;
qLygQUFBKE9Q/WjRR3cN4WOFDIE3wVpE8uejkDy++pbGV2xb7mQG+77S3lWvtdDp&lt;br /&gt;
5Zu4qDl0daZjAP6W/636aBqiQbGvFM1Ch0+UNyYie9vh7zjX5K3viGiUHW1yb9+o&lt;br /&gt;
QQfpgIIODz7X3bk6kQBS5j+xDAx+oKAw0sxlTGqp5hX6nPP9/LI7XeCeWQdAV/ls&lt;br /&gt;
G5q8UjVDKyKjBQUWftnRDpoUnCOSTschFifktDInHrSaVetaWn5yFs/cx+DAE2xa&lt;br /&gt;
wRJn6k8gXhk72ytTqd64BLw3evZMPnaldEhMGle44ZYf7cebL8RhKDEgoT99DLKU&lt;br /&gt;
1TIiOzsMz+nzkI0t8U6nsF+pEpWuOjPP4lPSOqhAbwGMIdTgvtWSmLBJzdQ0uP85&lt;br /&gt;
Vo6Gez8mgjcFh39VGuq2WmkY6hkmiodpv2IjFBUAkC4vrGh1E/NQGIBWj/5HwDiy&lt;br /&gt;
iA+gw/mQts2eDQw00UbpCAXDuxIsmLwc5HI/gmiXxx82H1ZtGxljrut3vMotukKf&lt;br /&gt;
4gr+T4umvvEl/3/uGGEMT/WQySoso/47JS9tPiogA6D+GFJ2AZA1XsPuvuZ/WPWI&lt;br /&gt;
RbUlgOrVbq4a+7LBC/tzC28hSDF+VRdAT3FoiS2HXXFJYrCMCjmTFz3YTnKc6U/k&lt;br /&gt;
k1rfuoMLnFMimy+tR14zMuH6Dxu+SDFj862cZeMrQOAaplnGpxDiO37u8CKXaQJ7&lt;br /&gt;
JpiK5n2mrkSZ6RHM4m5VZeSJNSTtxJbs/3kaJZQLJ1e2wufD3Rzy05VKdQSyFjU9&lt;br /&gt;
J+D3spLNvz72gAvZJGLdP5BT/uIfAI40vvNx5csei9kqTQ2QLoL5bpvmV+d4uz6D&lt;br /&gt;
1RNVIYJ4cAkg5AjRpP6kGWHGCx1GTc0MD34mCwNNW/ll&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se extrae la clave pública del fichero &amp;quot;privadoRSA.pem&amp;quot;, esta clave es la que se distribuye a las personas o entidades. Cuando la otra parte quiera enviar un mensaje, lo cifrará con esta clave para que posteriormente el destinatario lo descifre con su clave privada. La clave pública la contendrá el fichero &amp;quot;publicaRSA.pem&amp;quot; y para su extracción se usará &amp;quot;-pubout&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privadoRSA.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar extraer la clave pública sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privadoRSA.pem -pubout -out publicaRSA.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave pública se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat publicaRSA.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXck+2msWq8LEhX/AwJB&lt;br /&gt;
7hIZvW+QwpODVU5RkfFEk+8L2IPK+BWM6gMZO6HfQqn8yjkjAHTEY/RlBSGaCX1V&lt;br /&gt;
AA5V3RQs4SBbcQAFo0tBpqhTUw36Se9sozaxnN4kObTZxvFmzX3BqtKzbZP33/og&lt;br /&gt;
RgKELBpe43GTDkhQtfWpCzGQRiGodFBLBPQ7HibdKB+RK/3wTftUOgriabb5HSdI&lt;br /&gt;
9ySyrkvykEheRHgFe6XUo6gU3BWA1h276wXqdw2TiJ+VR/GX8tzXGV1RSthxqNpW&lt;br /&gt;
2/EpGOV12vRz9MnTEdt2Rfmx9x3VzMrxjiXSK97xpWXlqmoRCj+cdb1xvD05vVcG&lt;br /&gt;
MwIDAQAB&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DSA de 2048 bits.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Se genera el fichero que contendrá los parámetros DSA en dsa.params.pem usando'''&amp;quot;-genparam&amp;quot;'''. Además se añade '''&amp;quot;-pkeyopt&amp;quot;'''para especificar el tamaño en bits (2048).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DSA -out dsa.params.pem \&lt;br /&gt;
&amp;gt;       -pkeyopt dsa_paramgen_bits:2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
...............+...........+......+............+.........+..........&lt;br /&gt;
...........+..+...............+...............................+.....&lt;br /&gt;
....+....+.......+.+............................+.............+..+..&lt;br /&gt;
+............+.......................+.....+..............+......+..&lt;br /&gt;
..+.+..........+......+...................+..+.+....+...+...........&lt;br /&gt;
.................................................+............+.....&lt;br /&gt;
+..+..................................+.......+.+..+..............+.&lt;br /&gt;
.+.......+.............+...........+......+...........+..+....+.....&lt;br /&gt;
......+.....+.........+.................+...+......+...............&lt;br /&gt;
............+....+............+.........+.+.+........+.......+....+.&lt;br /&gt;
.......+.................................+.+......+..+...+....+......&lt;br /&gt;
...+.+.+..+........+......+.............+...........+.+..+.+.........&lt;br /&gt;
.........+.....+...+......+..........+..+...............+.......+.+.&lt;br /&gt;
...+......+..........................................+............+.&lt;br /&gt;
.............+...............+.............+.......+.................&lt;br /&gt;
...+....+......+.+...+.....+.+.........+....................+........&lt;br /&gt;
.............+.........+.......+...+.................++++++++++++++++&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar los parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsaparam -outform PEM -out dsa.params.pem 2048 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dsa.params.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DSA PARAMETERS-----&lt;br /&gt;
MIICIAKCAQEAhRIR6kI6+G+0+ruDK8v0BfYLAtBmm5nIePn4hJzUTTgTzXPjJKg0&lt;br /&gt;
Q/oJciPw3/guyXIEHZD/JDBoiBM1VByGwyes9L9JeHWnP3u0lhoyeIGlYchSKu/X&lt;br /&gt;
mW5c0vvVa6TMWTH+Y9oVzS8f0iRLiSzZCytsAz54TP87uGt231Pwvh2XyotYOh6U&lt;br /&gt;
lQB7m0DiocDtFjVmi5v0ZdclxN9/1bwEz3q/CtwqfNP5uBCzuR2h2Om0Vo1ctAr4&lt;br /&gt;
1U0E8oXRmW7jVTdSej4MQ1VqPNv9xs7gZRpCIV/3XWJP0g4PPAHSFv5+xiVOrpFB&lt;br /&gt;
UW7bjoP+BEH880G7JxnV3Q+U1SYuFEmGqwIVAMpBJ7V1B/jHAIAS2OpO+DiUHy+5&lt;br /&gt;
AoIBAGtACSNtaf2mzdVHLU0+D/LeM7cjisGtHwR7ZBmsd9WJ7xMOS6s0B8rgCWXq&lt;br /&gt;
5bIgtJZBYkZUG+sxyoLAe7t2lwCNsl0jfJ13ZVU+WWPzHGo5JXayTLYFCHDWGdKG&lt;br /&gt;
8ioKSBjsJv3qgxoUNw1Cp/4u3oA/0YpUUOTIgWCzLLsKWE5sPMZJA5uC60pZHdU9&lt;br /&gt;
U42+8sLkIxxlFO/FgOWIotMrULfFQhpxCbUvAllP9wKsW6sJuN+QMUrBtLITBJGc&lt;br /&gt;
f+x8/oQ57mNcUpO8j/LMwjxM17BkqAPsFgbxO+DP5mVzLKk2/rzLOe9afiyW+H5E&lt;br /&gt;
XCRUWsKwuCbNW283UHMLgcBdsZg=&lt;br /&gt;
-----END DSA PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dsa.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dsa.params.pem -out private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Otra manera de generar la clave privada a partir del fichero de parámetros DSA sería la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl gendsa -aes256 -out private.pem dsa.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat private.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIICvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQISAJFHx6O9lwCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBC6Kp0K/WzT6fuRnEPpFTSSBIIC&lt;br /&gt;
YDE9CRb36TVvxQ1LD8yV7u8Y+5jUQ+cpTn8m7TXogA3umuQ0/Q8qmp0LLOhMEhgT&lt;br /&gt;
ngcapbOqzYzzeAYhaRD0XNJh4D0B8WydbX2LI62b8mhM8SAtemkrFfqmf6+atuHD&lt;br /&gt;
nbojPMuvJu3/iaNw2OUDm508Zu4ZeRz+iwJMrlMnJx1yFfwBWWsNAIM/j4E7ansl&lt;br /&gt;
YLYtS/Kz8YjLALX+mLLcMrl7YjdojoDxpY6pP+47nsiyErdt1CRa44qEx69OUT4E&lt;br /&gt;
yhZXhHG711VemJi2ktskMP3K3bzkUXGNco/RK9Tx/sENuqE65FBumKBKp4pNWYv4&lt;br /&gt;
YCMh7eIGvcwL/xsrrkEY/dRept4BHnCZ2ZrqQsuvK6aZIxJ864PwTKNIpSQ2RDDc&lt;br /&gt;
GJu5S4z94YrZGLtY3UU1l+D7ExpERuO8cBuzaotPQjQbmxNvN0/3/NqAC7BNlMh0&lt;br /&gt;
LyQE3Ph2W4IkfdX5dg3CNitcHFFCT/wIS4xqUNJk5MZ5GBB8dVzzOHrpzXq3LZ6t&lt;br /&gt;
1PlzCyECyK6g6Yk6fbjvO7rya2wkYsGfoeqmkwAx9pWxfiRQGPwWmqTm2nk4TTWg&lt;br /&gt;
SNKlxCdBMUUt/c5CXgL3+3TNK2H4yY5/UQlMF19RN47lLHsS4rWkKaHg+NSO+CB0&lt;br /&gt;
5EeH26xu4zFmlLkuKsTjvoV0T1LGqVb/3jxcy+gzO1BTi/FP6WnRuY9OrECHvWs6&lt;br /&gt;
MeJY3kI6/Tth/Ze274LiwJAxMlAhNWtA/1WtnZHhKol9WnbQOLV5oNCXK4fMwhbu&lt;br /&gt;
fBqcEZcWR6fBT956IY3TKpnDccGcBv3k2bFY5A3NoKdm&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;private.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in private.pem -pubout -out public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for private.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' otra forma de extraer la clave pública a partir de la privada es la siguiente (obsoleto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dsa -in private.pem -outform PEM -out public.pem -pubout &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCFEhHqQjr4b7T6u4Mry/QF9gsC0Gab&lt;br /&gt;
mch4+fiEnNRNOBPNc+MkqDRD+glyI/Df+C7JcgQdkP8kMGiIEzVUHIbDJ6z0v0l4&lt;br /&gt;
dac/e7SWGjJ4gaVhyFIq79eZblzS+9VrpMxZMf5j2hXNLx/SJEuJLNkLK2wDPnhM&lt;br /&gt;
/zu4a3bfU/C+HZfKi1g6HpSVAHubQOKhwO0WNWaLm/Rl1yXE33/VvATPer8K3Cp8&lt;br /&gt;
0/m4ELO5HaHY6bRWjVy0CvjVTQTyhdGZbuNVN1J6PgxDVWo82/3GzuBlGkIhX/dd&lt;br /&gt;
Yk/SDg88AdIW/n7GJU6ukUFRbtuOg/4EQfzzQbsnGdXdD5TVJi4USYarAhUAykEn&lt;br /&gt;
tXUH+McAgBLY6k74OJQfL7kCggEAa0AJI21p/abN1UctTT4P8t4ztyOKwa0fBHtk&lt;br /&gt;
Gax31YnvEw5LqzQHyuAJZerlsiC0lkFiRlQb6zHKgsB7u3aXAI2yXSN8nXdlVT5Z&lt;br /&gt;
Y/McajkldrJMtgUIcNYZ0obyKgpIGOwm/eqDGhQ3DUKn/i7egD/RilRQ5MiBYLMs&lt;br /&gt;
uwpYTmw8xkkDm4LrSlkd1T1Tjb7ywuQjHGUU78WA5Yii0ytQt8VCGnEJtS8CWU/3&lt;br /&gt;
Aqxbqwm435AxSsG0shMEkZx/7Hz+hDnuY1xSk7yP8szCPEzXsGSoA+wWBvE74M/m&lt;br /&gt;
ZXMsqTb+vMs571p+LJb4fkRcJFRawrC4Js1bbzdQcwuBwF2xmAOCAQUAAoIBACzq&lt;br /&gt;
kTPSyHX1OXML7HLdSTBkQtIvjl0OoMLYdD21dCgPSVygzPmqyEWAoUGdp5AY5isY&lt;br /&gt;
eTtwocGLWFLk20qqJ8PfQ6WAp2YswxLS8dZhWPbGM4g3z2mquDX4/nOHOXL8y5f/&lt;br /&gt;
ME2JiUCeleuh3uZXLIP9tGXV0MpmyKWow9mAHmfdsIft5eQqMD+0fPtY3kZXRw9S&lt;br /&gt;
cwhvXnMpeoa2hZt7s5rm1n8Q0eGozEACjdmil+NSNbXHDsbsgYQUwfRy2+9j6DnP&lt;br /&gt;
Vh3Az6x9jR/zzKekuXPhGQCNNshLgRdmuSJTiHoEK2H5Z7XczL4M0xFylrcS5A72&lt;br /&gt;
/p+j4tQ/DoR/P6INFIk=&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DH (Diffie-Hellman)====&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se generará un par de claves asimétricas DH.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un conjunto de parámetros DH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -genparam -algorithm DH -out dh.params.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..............+...............+..............................+.............&lt;br /&gt;
..................................................+................+.......&lt;br /&gt;
....................................................+......................&lt;br /&gt;
......................................+..................+......+..........&lt;br /&gt;
.....................................................+.....................&lt;br /&gt;
....+.....................+.........................+......+...............&lt;br /&gt;
..........+........+..................++*++*++*++*++*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado se ejecuta un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat dh.params.pem   &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-----BEGIN DH PARAMETERS-----&lt;br /&gt;
MIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5MtjcOA3Q5heR6m7T5r9QXaetH7cK&lt;br /&gt;
9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO1Ljld/5XmAJLwp+OaT5gmmmI&lt;br /&gt;
OJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuNmJPEiPLoPi57AgEC&lt;br /&gt;
-----END DH PARAMETERS-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos la clave privada a partir del fichero &amp;quot;dh.params.pem&amp;quot; cifrado con AES256. Se deberá introducir una contraseña con la que protegeremos la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -aes256 -paramfile dh.params.pem -out privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido del fichero creado que contiene la clave privada se realiza un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat privateDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWxTxGZ6e1EACAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAGMSzeSmksb4V8alSUWSN6BIIB&lt;br /&gt;
MM655NUrf1fLjSlSi69/yGcFISKA73OaGXO8JrFfvDi95Ig/Yf18BO+otT0iKMvX&lt;br /&gt;
dQav/XEfyBofeJERZiILq9A7uzJ9sWAPZcrLiyqTQQP6hPhGEr8s7l05ExWg0rtX&lt;br /&gt;
TGXZfqVWTyzBOEuJ56GVdEcg2NYZv0sBpnrnP+LoJugl7oKhMP97MEChusSu6UQ+&lt;br /&gt;
7vGaFkPOI9hQ4OxY5PfmylhYYfGwVF2oBI4hnzKJq4B81KrG+axo2MDOhWBpHD/z&lt;br /&gt;
zVIzTfYLCNiG+5hKXt4e7wT/CBxUUGXfxpjcP/OJN+wwUe7uRtrRMsWagJYEh1KC&lt;br /&gt;
2APuyIrGagPWx02lrunSaAad6feGvx1g/q3LzqCEiDGoc5pnuTf0SI2gGHEnlV0T&lt;br /&gt;
tF30hVobMvlzaqx5gdDnX14=&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública a partir del fichero &amp;quot;privateDH.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkey -in privateDH.pem -pubout -out publicDH.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for privateDH.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La contraseña que hay que introducir es la misma con la que se protegió la clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Para ver el contenido de la clave pública hacemos un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN PUBLIC KEY-----&lt;br /&gt;
MIIBHzCBlQYJKoZIhvcNAQMBMIGHAoGBAPAPLs7hB1hTlQEbANW7EG4+jGJ5Mtjc&lt;br /&gt;
OA3Q5heR6m7T5r9QXaetH7cK9reMSDJAFBFPqlc36ogzIaxOHYhGy3wmsBPYKbKO&lt;br /&gt;
1Ljld/5XmAJLwp+OaT5gmmmIOJ0UPl2cUv4rzaZGXxQcMEwy/2aQgpTSpBjpoBuN&lt;br /&gt;
mJPEiPLoPi57AgECA4GEAAKBgDsIgvkf1EAotwaUC7MtPhcExAy4w8xtXNfr1gIm&lt;br /&gt;
I4HJ5zUe3RIUEO5jZDIZcs1HjAB1LF8YHEcZ7rnCCHIABTW5faohD9juR4XYhOhn&lt;br /&gt;
1VfVeyPSjd4Wet5WgfWUX30S2IHS0her/pakV63GsQ5qGbrUUziFFLS2vubzeaWM&lt;br /&gt;
3pIZ&lt;br /&gt;
-----END PUBLIC KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EC (Elliptic curve) &amp;lt;ref&amp;gt;Matt. (2018, December 24). Command Line Elliptic Curve Operations. Wiki OpenSSL. Retrieved 12:50, Decemeber 26, 2018, from https://wiki.openssl.org/index.php?title=Command_Line_Elliptic_Curve_Operations&amp;amp;oldid=2734&amp;lt;/ref&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OpenSSL proporciona dos potentes herramientas de línea de comando para trabajar con claves adecuadas para algoritmos de curva elíptica (EC):&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam&lt;br /&gt;
 openssl ec&lt;br /&gt;
&lt;br /&gt;
Los únicos algoritmos de curva elíptica que actualmente soporta OpenSSL son Elliptic Curve Diffie Hellman (ECDH) para el acuerdo de clave y el algoritmo de firma digital de curva elíptica (ECDSA) para la firma / verificación.&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave privada EC =====&lt;br /&gt;
&lt;br /&gt;
Por defecto, OpenSSL funcionará con archivos PEM para almacenar claves privadas de EC. Estos son archivos de texto que contienen datos codificados en base 64. Un archivo con la extensión &amp;quot;.pem&amp;quot; tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG&lt;br /&gt;
 SM49AQECGQD////////////////////+//////////8wSwQY////////////////&lt;br /&gt;
 /////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z&lt;br /&gt;
 eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz&lt;br /&gt;
 S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0&lt;br /&gt;
 AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5&lt;br /&gt;
 0g9/pw==&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
O si el arvhivo está cifrado tendrá un aspecto similar a:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PRIVATE KEY-----&lt;br /&gt;
 Proc-Type: 4,ENCRYPTED&lt;br /&gt;
 DEK-Info: DES-EDE3-CBC,258248872DB25390&lt;br /&gt;
 &lt;br /&gt;
 JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn&lt;br /&gt;
 24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o&lt;br /&gt;
 zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF&lt;br /&gt;
 0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk&lt;br /&gt;
 n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S&lt;br /&gt;
 6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp&lt;br /&gt;
 kDny2v3D8sU=&lt;br /&gt;
 -----END EC PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
También puede encontrar claves privadas de formato PKCS8 (procesa las claves privadas en formato PKCS#8) en archivos PEM. Los archivos de clave privada PKCS8, como los anteriores, pueden contener muchos tipos diferentes de clave privada, no solo claves EC.&lt;br /&gt;
&lt;br /&gt;
Se puede pasar de un formato a otro si lo desea. Todos los comandos de conversión pueden leer las formas cifradas o no cifradas de los archivos, sin embargo, se debe especificar si desea que la salida esté cifrada o no. Para convertir un archivo PKCS8 a un formato EC cifrado tradicional use:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
El primer argumento se puede reemplazar por &amp;quot;aes-128-cbc&amp;quot; con cualquier otro nombre de cifrado válido openssl. Para convertir un archivo PKCS8 a un formato EC sin cifrar tradicional, simplemente omitimos el primer argumento:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -out tradfile.pem&lt;br /&gt;
&lt;br /&gt;
O para convertir de un formato EC tradicional a un formato PKCS8 cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
O para un formato PKCS8 no cifrado hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que, de manera predeterminada (extensión &amp;quot;.pem&amp;quot;), los archivos de clave privada de EC no están cifrados (debe declarar explícitamente que el archivo debe estar cifrado y qué cifrado usar), mientras que para los archivos PKCS8 ocurre lo contrario. El valor predeterminado es cifrar: se debe indicar explícitamente que no desea que se aplique el cifrado, utilizando la opción &amp;quot;-nocrypt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Además del formato PEM, todos los tipos de archivos de claves anteriores también se pueden almacenar en formato DER. Este es un formato binario y, por lo tanto, no es directamente legible para humanos, a diferencia de un archivo PEM. Un archivo PEM contiene datos DER codificados utilizando reglas de codificación base 64 con un encabezado y un pie de página agregados. A menudo es más conveniente trabajar con archivos PEM por este motivo.&lt;br /&gt;
&lt;br /&gt;
Los comandos de openssl suelen tener las opciones &amp;quot;-inform DER&amp;quot; o &amp;quot;-outform DER&amp;quot; para especificar que el archivo de entrada o salida es DER respectivamente. Entonces, por ejemplo, el comando para convertir un archivo PKCS8 a un formato EC cifrado tradicional en DER se hace lo mismo que antes, pero añadiendo &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in p8file.pem -outform DER -out tradfile.der&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que no puede cifrar un formato tradicional de clave privada de EC en formato DER (y, de hecho, si intenta hacerlo, el argumento se ignorará silenciosamente). De igual forma esto no ocurre para los archivos PKCS8, pueden estar cifrados incluso en formato DER. Así, en el siguiente ejemplo se convertirá un archivo de clave de formato tradicional en un formato PKCS8 cifrado y a su vez, en formato DER.&lt;br /&gt;
&lt;br /&gt;
 openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der&lt;br /&gt;
&lt;br /&gt;
===== Formatos de archivo de clave pública EC =====&lt;br /&gt;
&lt;br /&gt;
Las claves públicas de EC también se almacenan en archivos PEM. Una clave pública típica de la EC tiene el siguiente aspecto:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN PUBLIC KEY-----&lt;br /&gt;
 MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T&lt;br /&gt;
 ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW&lt;br /&gt;
 -----END PUBLIC KEY-----&lt;br /&gt;
&lt;br /&gt;
Este formato se utiliza para almacenar todos los tipos de claves públicas en OpenSSL, no solo las claves EC.&lt;br /&gt;
&lt;br /&gt;
Es posible crear un archivo de clave pública a partir de un archivo de clave privada, aunque no al revés:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem&lt;br /&gt;
&lt;br /&gt;
Como se dijo en el apartado anterior, una versión codificada en DER puede crearse usando &amp;quot;-outform DER&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der&lt;br /&gt;
&lt;br /&gt;
===== Generando claves y parámetros de EC =====&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros de EC contiene toda la información necesaria para definir una curva elíptica que luego se puede usar para operaciones criptográficas (es decir, para ECDH y ECDSA). OpenSSL contiene un gran conjunto de curvas predefinidas que se pueden usar. La lista completa de curvas incorporadas se puede obtener a través del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -list_curves&lt;br /&gt;
&lt;br /&gt;
Un archivo de parámetros EC se puede generar para cualquiera de las curvas con nombre incorporadas de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -out secp256k1.pem&lt;br /&gt;
&lt;br /&gt;
Se puede reemplazar secp256k1 por cualquier curva de la lista.&lt;br /&gt;
&lt;br /&gt;
Las claves se pueden generar desde el comando ecparam, ya sea a través de un archivo de parámetros preexistentes o directamente seleccionando el nombre de la curva. Para generar un par de claves privadas / públicas a partir de un archivo de parámetros preexistente use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
O para hacer la operación equivalente sin un archivo de parámetros, use lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem&lt;br /&gt;
&lt;br /&gt;
La información sobre los parámetros que se han utilizado para generar la clave se incrusta en el propio archivo de clave.&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, al crear un archivo de parámetros o al generar una clave, openssl solo almacenará el nombre de la curva en los parámetros generados o el archivo de clave:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto simplemente confirmará el nombre de la curva en el archivo de parámetros imprimiendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 ASN1 OID: secp256k1&lt;br /&gt;
&lt;br /&gt;
Si desea examinar los detalles específicos de los parámetros asociados a una curva con un nombre particular, se puede lograr de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout&lt;br /&gt;
&lt;br /&gt;
El comando anterior muestra los detalles de una curva desde un archivo, pero esto también se puede hacer directamente usando el argumento &amp;quot;-name&amp;quot; en lugar de &amp;quot;-in&amp;quot;. La salida se verá similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
 Field Type: prime-field&lt;br /&gt;
 Prime:&lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:&lt;br /&gt;
     ff:fc:2f&lt;br /&gt;
 A:    0&lt;br /&gt;
 B:    7 (0x7)&lt;br /&gt;
 Generator (uncompressed):&lt;br /&gt;
     04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:&lt;br /&gt;
     0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:&lt;br /&gt;
     f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:&lt;br /&gt;
     0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:&lt;br /&gt;
     8f:fb:10:d4:b8&lt;br /&gt;
 Order: &lt;br /&gt;
     00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:&lt;br /&gt;
     ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:&lt;br /&gt;
     36:41:41&lt;br /&gt;
 Cofactor:  1 (0x1)&lt;br /&gt;
&lt;br /&gt;
Se pueden generar parámetros y archivos de claves para incluir los parámetros explícitos completos en lugar de solo el nombre de la curva, si se desea. Esto podría ser importante si, por ejemplo, no todos los sistemas de destino conocen los detalles de la curva mencionada. En la versión 1.0.2 de OpenSSL, se han agregado nuevas curvas con nombre, como brainpool512t1. Intentar usar un archivo de parámetros o clave en versiones de OpenSSL menores a 1.0.2 con esta curva resultará en un error:&lt;br /&gt;
&lt;br /&gt;
 bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
 unable to load elliptic curve parameters&lt;br /&gt;
 140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:&lt;br /&gt;
 140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:&lt;br /&gt;
 140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:&lt;br /&gt;
&lt;br /&gt;
Este problema puede evitarse si se usan parámetros explícitos en su lugar. Así que bajo OpenSSL 1.0.2 podría crear un archivo de parámetros como este:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Mirando el archivo de parámetros notará que ahora es mucho más largo:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN EC PARAMETERS-----&lt;br /&gt;
 MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc&lt;br /&gt;
 ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp&lt;br /&gt;
 xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C&lt;br /&gt;
 xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj&lt;br /&gt;
 BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+&lt;br /&gt;
 uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa&lt;br /&gt;
 W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn&lt;br /&gt;
 MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw&lt;br /&gt;
 MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=&lt;br /&gt;
 -----END EC PARAMETERS-----&lt;br /&gt;
&lt;br /&gt;
Los parámetros completos se incluyen, en lugar de solo el nombre. Esto ahora puede ser procesado por versiones de OpenSSL anteriores a 1.0.2. Así que bajo 1.0.1:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -in brainpoolP512t1.pem -text -noout&lt;br /&gt;
&lt;br /&gt;
Esto mostrará correctamente los parámetros, aunque esta versión de OpenSSL no conoce esta curva.&lt;br /&gt;
&lt;br /&gt;
Lo mismo ocurre con los archivos de clave. Entonces para generar una clave con parámetros explícitos:&lt;br /&gt;
&lt;br /&gt;
 openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit&lt;br /&gt;
&lt;br /&gt;
Este archivo de claves ahora puede ser procesado por versiones de openssl que no conocen la curva de Brainpool.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, se debe tener en cuenta que una vez que los parámetros se han convertido del formato de nombre de curva a parámetros explícitos, no es posible volver a cambiarlos, es decir, no hay una utilidad para tomar un conjunto de parámetros explícitos y determinar a que curva está asociada.&lt;br /&gt;
&lt;br /&gt;
=== Cifrado Asimétrico ===&lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
En este caso se realizará un ejemplo en el que el emisor (Alice) enviará el documento &amp;quot;texto.txt&amp;quot; cifrado en AES-256-CBC (texto.cif), el resumen firmado en SHA-256 (firmaDoc.rsa) y la contraseña cifrada con nuestra clave pública RSA (contraseña.cif) creada anteriormente. Antes de nada, emisor (Alice) y receptor (Bob, nosotros en este caso) tendrán que haberse intercambiado las claves públicas.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Recibimos el mensaje de Alice y procedemos a descifrar la contraseña enviada por Alice con nuestra clave privada.Si nuestra clave privada está protegida, se nos solicitará la contraseña que la protege y que indicamos al crear la clave.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -decrypt -in contraseña.cif -out contraseña.txt -inkey privadoRSA.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al hacer un cat al archivo de salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; prueba+12 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Una vez obtenida la contraseña, se puede descifrar el &amp;quot;texto.cif&amp;quot; con dicha contraseña.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -d -aes-256-cbc -pbkdf2 -in texto.cif -out texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Verificar que el texto cifrado se ha firmado correctamente. Como se firmó con su clave privada, usaremos su clave pública.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; Verified OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Nota:'''PARA REALIZAR ESTE EJEMPLO SUPONEMOS QUE ALICE REALIZÓ PREVIAMENTE LAS SIGUIENTES OPERACIONES:&lt;br /&gt;
&lt;br /&gt;
; texto.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl enc -aes-256-cbc -pbkdf2 -in texto.txt -out texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; contraseña.cif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -encrypt -in contraseña.txt -out contraseña.cif -inkey publicaRSA.pem &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al realizar un &amp;quot;cat&amp;quot; del fichero &amp;quot;contraseña.txt&amp;quot; se observa la contraseña con la que Alice cifró el texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba+12&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; firmaDoc.rsa&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firmaDoc.rsa texto.cif &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmado y Comprobación de Resúmenes ===&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará la firma y verificación del fichero &amp;quot;texto.txt&amp;quot; (utilizaremos &amp;quot;SHA512&amp;quot;) que se llamará &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de nada, utilizaremos el comando &amp;quot;pkeyutl&amp;quot; en el primer ejemplo, dicho comando se puede usar para realizar operaciones de clave pública utilizando cualquier algoritmo compatible.&lt;br /&gt;
&lt;br /&gt;
==== DSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada DSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey private.pem -out firma.dsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.dsa -inkey public.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa. &lt;br /&gt;
&lt;br /&gt;
==== RSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Creamos el resumen y lo firmamos en la misma línea introduciendo la contraseña que protege la clave RSA. En este caso usaremos el comando &amp;quot;dgst&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -sign privadoRSA.pem -out firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente usando nuestra clave pública:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha256 -verify publicaRSA.pem -signature firma.rsa texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Verified OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
==== ECDSA ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Realizamos el resumen del fichero &amp;quot;texto.txt&amp;quot; y lo guardamos en el fichero de salida &amp;quot;resumen.bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl dgst -sha512 -binary -out resumen.bin texto.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Firmamos el &amp;quot;resumen.bin&amp;quot; con el comando &amp;quot;pkeyutl&amp;quot;y usaremos la clave privada ECDSA generada anteriormente. En el caso de que se haya protegido la clave con una contraseña deberemos introducirla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -sign -in resumen.bin -inkey secp256k1-key.pem -out firma.ecdsa -pkeyopt digest:sha512&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Se procede a verificar que se ha firmado correctamente ejecutamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl pkeyutl -pubin -verify -in resumen.bin -sigfile firma.ecdsa -inkey publicsecp256k1.pem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature Verified Successfully&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observa que la firma ha sido exitosa.&lt;br /&gt;
&lt;br /&gt;
=== Derivación de claves DH ===&lt;br /&gt;
&lt;br /&gt;
==== DH ====&lt;br /&gt;
&lt;br /&gt;
A partir de los parámetros DH generados anteriormente, generaremos otro par de claves ('''privateDH2.pem''' y '''publicDH2.pem'''). De esta manera, podremos comprobar la derivación entre dos pares de claves. &lt;br /&gt;
&lt;br /&gt;
Supongamos que el par de claves '''&amp;quot;privateDH.pem&amp;quot;''' y '''&amp;quot;publicDH.pem&amp;quot;''' pertenecen a Alice y '''&amp;quot;privateDH2.pem&amp;quot;''' y '''&amp;quot;publicDH2.pem&amp;quot;''' a Bob.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH.pem -peerkey publicDH2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey privateDH2.pem -peerkey publicDH.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Enter pass phrase for privateDH2.pem:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== X25519 ====&lt;br /&gt;
&lt;br /&gt;
X25519 es un intercambio de claves Diffie-Hellman de curva elíptica utilizando Curve25519. Permite que dos partes acuerden conjuntamente un secreto compartido mediante un canal inseguro. Esta curva, se trata diferente al resto de ECDH, ya que X25519 posee su propio algoritmo.&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Alice. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Alice a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv1.pem -pubout -out pub1.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Generamos un par de claves X25519 para Bob. Primero generamos la clave privada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl genpkey -algorithm X25519 -out priv2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Extraemos la clave pública de Bob a partir de la clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkey -in priv2.pem -pubout -out pub2.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Alice y con la clave pública de Bob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv1.pem -peerkey pub2.pem -out secreto1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 6&lt;br /&gt;
&lt;br /&gt;
Derivamos un valor secreto con la clave privada de Bob y con la clave pública de Alice.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkeyutl -derive -inkey priv2.pem -peerkey pub1.pem -out secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 7&lt;br /&gt;
&lt;br /&gt;
Al comparar ambos valores deberían ser idénticos. Si al ejecutar el comando no sale ningún mensaje por la terminal, el resultado es el correcto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmp secreto1 secreto2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S/MIME ==&lt;br /&gt;
&lt;br /&gt;
En este apartado se realizará una introducción sobre el estándar S/MIME y ejemplos para dominar el manejo y estructura de correos electrónicos seguros. Dichos ejemplos se llevarán a cabo para el análisis y generación de este tipo de mensajes de correo electrónico seguro desde línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;'''''smime'''''&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; -encrypt&lt;br /&gt;
&lt;br /&gt;
Cifrar el correo para los certificados de destinatario dados. El archivo de entrada es el mensaje que se va a cifrar. El archivo de salida es el correo cifrado en formato MIME.&lt;br /&gt;
&lt;br /&gt;
; -decrypt&lt;br /&gt;
&lt;br /&gt;
Descifre el correo utilizando el certificado suministrado y la clave privada. Espera un mensaje de correo cifrado en formato MIME para el archivo de entrada. El correo descifrado se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -sign&lt;br /&gt;
&lt;br /&gt;
Firme el correo utilizando el certificado suministrado y la clave privada. Archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.&lt;br /&gt;
&lt;br /&gt;
; -verify&lt;br /&gt;
&lt;br /&gt;
Verificar el correo firmado.&lt;br /&gt;
&lt;br /&gt;
; -in filename&lt;br /&gt;
&lt;br /&gt;
El mensaje de entrada que se va a cifrar o firmar o el mensaje MIME que se va a descifrar o verificar.&lt;br /&gt;
&lt;br /&gt;
; -out filename&lt;br /&gt;
&lt;br /&gt;
El texto del mensaje que se ha descifrado o verificado o el mensaje de formato MIME de salida que se ha firmado o verificado.&lt;br /&gt;
&lt;br /&gt;
; -text&lt;br /&gt;
&lt;br /&gt;
Esta opción agrega encabezados MIME de texto sin formato (texto / sin formato) al mensaje suministrado si se encripta o firma.&lt;br /&gt;
&lt;br /&gt;
; -signer file&lt;br /&gt;
&lt;br /&gt;
Un certificado de firma al firmar un mensaje, esta opción se puede utilizar varias veces si se requiere más de un firmante. &lt;br /&gt;
&lt;br /&gt;
; -to &lt;br /&gt;
&lt;br /&gt;
Correo del receptor.&lt;br /&gt;
&lt;br /&gt;
; -from&lt;br /&gt;
&lt;br /&gt;
Correo del emisor.&lt;br /&gt;
&lt;br /&gt;
; -subject&lt;br /&gt;
&lt;br /&gt;
Asunto del mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
S/MIME (Secure / Multipurpose Internet Mail Extensions) es un estándar orientado a la criptografía de clave pública y firmado de correo electrónico encapsulado en MIME (una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos de forma transparente para el usuario). &amp;lt;ref&amp;gt;Colaboradores de Wikipedia. S/MIME [en línea]. Wikipedia, La enciclopedia libre, 2016 [fecha de consulta: 26 de noviembre del 2018]. Disponible en &amp;lt;https://es.wikipedia.org/w/index.php?title=S/MIME&amp;amp;oldid=95828159&amp;gt;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Además, S/MIME provee los siguientes servicios de seguridad criptográfica para aplicaciones de mensajería electrónica:&lt;br /&gt;
&lt;br /&gt;
* Autenticación, integridad y no repudio (mediante el uso de firma digital).&lt;br /&gt;
* Privacidad y seguridad de los datos (mediante el uso de cifrado).&lt;br /&gt;
&lt;br /&gt;
=== Operaciones con S/MIME ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, tenemos que instalar el certificado raíz y el certificado de usuario desde una autoridad certificadora responsable de emitir y revocar los certificados (por ejemplo, CAcert). Una vez instalado dichos certificados, se deberá configurar el certificado de usuario en aplicaciones de correos electrónicos como Mozilla Thunderbird, Microsoft Outlook Express o Apple Mail. &lt;br /&gt;
&lt;br /&gt;
El certificado raíz es un certificado de clave pública sin firma o autofirmado que identifica la autoridad de certificación raíz (AC). Esto servirá para asegurar que un certificado de usuario sea de confianza.&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que extraer nuestro certificado de usuario en formato PKCS # 12 (se utiliza para almacenar claves privadas y certificados en un solo archivo cifrado &amp;lt;ref&amp;gt;Wikipedia contributors. (2018, November 21). PKCS 12. In Wikipedia, The Free Encyclopedia. Retrieved 16:56, November 23, 2018, from https://en.wikipedia.org/w/index.php?title=PKCS_12&amp;amp;oldid=869927894&amp;lt;/ref&amp;gt;) y se nos pedirá una contraseña para proteger dicho certificado. Nuestro certificado se llamará &amp;quot;Certificados.p12&amp;quot;. Obsérvese que es diferente exportar un certificado (que generará un fichero &amp;quot;.cer&amp;quot; o &amp;quot;.crt&amp;quot; solo con la parte pública) que extraer o &amp;quot;hacer copia&amp;quot; en cuyo caso se solicitará contraseña para cifrar la clave privada y se generará como fichero PKCS#12 y extensión &amp;quot;.p12&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Un formato alternativo más simple a PKCS # 12 (.p12) es PEM, que solo enumera los certificados y las claves privadas como cadenas Base 64 en un archivo de texto. Primero tendremos que introducir la contraseña que protege &amp;quot;Certificados.p12&amp;quot; y luego introducir una nueva para el certificado en formato PEM como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -in Certificados.p12 -out Certificado.pem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter Import Password:&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje (texto.txt) usaremos el comando &amp;quot;-sign&amp;quot; (firma el correo utilizando el certificado suministrado y la clave privada. El archivo de entrada es el mensaje a firmar. El mensaje firmado en formato MIME se escribe en el archivo de salida.), &amp;quot;-text&amp;quot; (agrega encabezados MIME de texto sin formato al mensaje suministrado si se cifra o firma), &amp;quot;-signer&amp;quot; (certificado de firma), &amp;quot;-from&amp;quot; (correo del emisor), &amp;quot;-to&amp;quot; (correo del destinatario), &amp;quot;-subject&amp;quot; (asunto). &lt;br /&gt;
&lt;br /&gt;
Se deberá introducir la contraseña que protege la clave privada. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer Certificado.pem -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado&amp;quot; -out smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter pass phrase for Certificado.pem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Monstraremos el mensaje haciendo un &amp;quot;cat&amp;quot;. Se podrá observar que el texto se lee y que la firma se encuentra en el anejo &amp;quot;smime.p7s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat smimeFirmado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----79B426144F5D0703AB81685861B9D87C&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
.....ETC&lt;br /&gt;
&lt;br /&gt;
------79B426144F5D0703AB81685861B9D87C--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje cifrado se necesita tener el certificado del destinatario. Una vez obtenido, se procede al envío y cifrado de dicho mensaje de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -encrypt -in texto.txt -from emisor@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje cifrado&amp;quot; receptor.pem &amp;gt; smimeCifrado.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
En este paso mostraremos el mensaje ejecutando un &amp;quot;cat&amp;quot;. Como se puede observar, a diferencia del apartado anterior, el texto no aparece (ya que está cifrado) y aparece el anejo &amp;quot;.p7m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIICHAYJKoZIhvcNAQcDoIICDTCCAgkCAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAID52yLZ&lt;br /&gt;
iR/MroIlAyee/o7n6/Az2Hp8TUNIsrNyCpD+vlSWIglaelGGA16neYIFQ3TW15dc&lt;br /&gt;
gPXPZUbgJHN37XPzxhp8PKwneimeRrzNUDgw4jUtH374WpaiO5QIoNp9ZS1osEVl&lt;br /&gt;
L9v4B1ATFZVLtLWwVU5D/EoCP/bHANc7SnyYcbjRseSCiD9nVipDvuLsgT0X0lIb&lt;br /&gt;
HmMvadI7c2KLu9S3i9mFE+74Ic274dafierHZ6P5yn8fZLU0HY3Sf7p0Ec7mt0Cc&lt;br /&gt;
LWbBzLrrMqfF5BnVOYSTp3l4+gzVILPcJfja2L9KlVppnz3WP+FeyZct0MwW02WE&lt;br /&gt;
wL64UTRKLgZo/nwwYwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgCqH16tl9nuIBA&lt;br /&gt;
lXZK1HLy7rwMhouInIr7Ppk2Q5LoBCrTS34AxC/Zx4F312cb9IoK5y9BVcbBAB1W&lt;br /&gt;
mEoXfDjHZWV5zI/il6exrQ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Envío de mensajes firmados y cifrados ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para enviar un mensaje firmado y cifrado, tenemos que tener el certificado de usuario de la persona a la que se quiere enviar el mensaje. &lt;br /&gt;
&lt;br /&gt;
Una vez obtenido el certificado del destinatario, tenemos que realizar los mismos pasos que en el apartado anterior pero a la hora de enviar el mensaje habrá que añadir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -sign -in texto.txt -text -signer emisor.pem -from emisor@hotmail.co -to receptor@hotmail.co -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; | openssl smime -encrypt -from emisor5@hotmail.com -to receptor@hotmail.com -subject &amp;quot;Mi mensaje firmado y cifrado&amp;quot; receptor.pem &amp;gt; EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for emisor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducimos la contraseña que protege nuestra clave privada.&lt;br /&gt;
&lt;br /&gt;
==== Descifrar mensaje firmado y cifrado ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
El destinatario cuando reciba el mensaje anterior podrá hacer un cat en la que aparecerá la información que introdujo el emisor a la hora de enviar el mensaje (si exporta el mensaje desde la aplicación de correo al sistema de ficheros como &amp;quot;.eml&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat EnviarMsn.eml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name=&amp;quot;smime.p7m&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
&lt;br /&gt;
MIIQAAYJKoZIhvcNAQcDoIIP8TCCD+0CAQAxggGdMIIBmQIBADCBgDB5MRAwDgYD&lt;br /&gt;
VQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAg&lt;br /&gt;
BgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEW&lt;br /&gt;
EnN1cHBvcnRAY2FjZXJ0Lm9yZwIDE+eRMA0GCSqGSIb3DQEBAQUABIIBAG0d2EmV&lt;br /&gt;
9bnpN31tY869teLO2obFtE9RlZ4j6Kk7WadalowbQBE2wq1vDuXkVYc3rWw3r7hO&lt;br /&gt;
VJ0fjCRC3oXWgLHpOIQ9gREjfK7+HHFhwYlZz1MBMGQTFEA4N7G7o2xMqRqCPu/9&lt;br /&gt;
Uv7y60qlpXm1QyATdQjLj1jm/C2UgC0NBCoaHEJDPIq26euKrc/gP9n5EHz7RR2r&lt;br /&gt;
bZWIlwJZQIBPqFWFY0UL/hCzW2sT5rtfhth+RZgdQTcLaV1HPO2noqbJr7cG7PZF&lt;br /&gt;
xDdnFl3+2jV7HLYpILVe7bXvIIvDHAjE9C8yskXlARWDW9Qf4bu9gWukTvtWryQQ&lt;br /&gt;
FR7Dk4/Ie8zt2w0wgg5FBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECP6OoUisdeZ4&lt;br /&gt;
gIIOICsC80w15IrRmhWW3Bqw7a9h1Rl3V9SAnVCTF2nivtMUOoFdNXm531+XcFIi&lt;br /&gt;
uXexV4szSy/jUuvrvMIQH9jnc2mEdGhZ5MZ8t0ZinTnsMVJdE55aVJCm7X5HVAzT&lt;br /&gt;
......ETC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observar que solo aparece un anejo de extensión &amp;quot;.p7m&amp;quot; (cifrado) que contendrá tanto el texto como la firma (en anejo &amp;quot;.p7s&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Para descifrar el mensaje el destinatario tendrá que introducir su certificado personal ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -decrypt -in EnviarMsn.eml -recip receptor.pem -out RecipMsn.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for receptor.pem:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El destinatario tendrá que introducir la contraseña que protege su clave privada.&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
Finalmente, se podrá leer el mensaje haciendo un &amp;quot;cat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat RecipMsn.txt &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To: receptor@hotmail.com&lt;br /&gt;
From: emisor@hotmail.com&lt;br /&gt;
Subject: Mi mensaje firmado y cifrado&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Type: multipart/signed; protocol=&amp;quot;application/x-pkcs7-signature&amp;quot;; micalg=&amp;quot;sha-256&amp;quot;; boundary=&amp;quot;----BBD077D8F787A08996B7D67BCDEF93B9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is an S/MIME signed message&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9&lt;br /&gt;
Content-Type: application/x-pkcs7-signature; name=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
Content-Transfer-Encoding: base64&lt;br /&gt;
Content-Disposition: attachment; filename=&amp;quot;smime.p7s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIIIVgYJKoZIhvcNAQcCoIIIRzCCCEMCAQExDzANBglghkgBZQMEAgEFADALBgkq&lt;br /&gt;
hkiG9w0BBwGgggWHMIIFgzCCA2ugAwIBAgIDE+XbMA0GCSqGSIb3DQEBCwUAMHkx&lt;br /&gt;
EDAOBgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9y&lt;br /&gt;
ZzEiMCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3&lt;br /&gt;
DQEJARYSc3VwcG9ydEBjYWNlcnQub3JnMB4XDTE4MTEyMTE5NDIxNloXDTE5MDUy&lt;br /&gt;
MDE5NDIxNlowQzEYMBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMScwJQYJKoZIhvcN&lt;br /&gt;
AQkBFhhzdWZpdmFsdmVyZGUxM0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCz8al3/lHzwxAcQgFbBiNENRTaBX76glnOyqHGeanE4SZc&lt;br /&gt;
CKHUDG9VTxQwX+hQVjlfROtV1ednjihCnTUCuEuAw5xLX3PE5JoQSqILkZhrNr1v&lt;br /&gt;
1Sv86Y3iyovDsZWBZJHFjhdB6To2+z0gbaGBDy+NmOlQV6iAOaLAjJ8ZXCfbWN8a&lt;br /&gt;
7oOIahZQJqojLgTpkKrQgZPnVuMA/maM9V9WHr4Amze88wwPtiBe470zHltY6KTi&lt;br /&gt;
8d/26g0im1vm/STAjJpyZzXxlVZq3RGc3a+QTYUQHtETRSQu5AU8QxI9NHg/3we6&lt;br /&gt;
eMiEw5XpcneC40ogECvG4fula87Y8iMskcBxoVZJAgMBAAGjggFIMIIBRDAMBgNV&lt;br /&gt;
......ETC&lt;br /&gt;
&lt;br /&gt;
------BBD077D8F787A08996B7D67BCDEF93B9--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificación de mensajes ====&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Para poder verificar que el mensaje y la persona que lo envía son de confianza ejecutamos el siguiente comando. En &amp;quot;-CAfile&amp;quot; se introduce el certificado raíz de la autoridad certificadora. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl smime -verify -in RecipMsn.txt -CAfile CACertSigningAuthority.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontent-Type: text/plain&lt;br /&gt;
&lt;br /&gt;
Verification successful&lt;br /&gt;
En un lugar de la Mancha de cuyo nombre no quiero acordarme...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generación y verificación de certificados ==&lt;br /&gt;
&lt;br /&gt;
Un certificado autofirmado contiene una clave pública, información acerca del propietario del certificado y la firma del propietario. Además, tiene una clave privada asociada, aunque no verifica el origen del certificado a través de una tercera entidad emisora de certificados, es decir, no existe una entidad que lo valide.&lt;br /&gt;
&lt;br /&gt;
En este apartado se explicará el procedimiento para generar una cadena de certificados, incluyendo un certificado raíz autofirmado al que llamaremos &amp;quot;certificadoRaiz.cert&amp;quot;. Este último será el que firme un nuevo certificado al que llamaremos &amp;quot;certificadoIntermedio.cert&amp;quot; y además, verificaremos por separado cada uno de ellos. &lt;br /&gt;
&lt;br /&gt;
Y para terminar crearemos otro certificado llamado &amp;quot;certificadoFinal.cert&amp;quot; firmado con el &amp;quot;certificadoIntermedio.cert&amp;quot;. Se validará el certificado final concatenándolo con el certificado intermedio y de esta forma, constituirán el certificado &amp;quot;chain.cert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Certificado Raíz Autofirmado ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certifiado raíz RSA que contendrá la clave privada cifrada en AES con la que firmaremos el &amp;quot;certificadoRaiz.cert&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoRaiz.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..+++++&lt;br /&gt;
.........................................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWm127tzFQOUCAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAqVF1oeyS8Z48zXgmt4EQ0BIIE&lt;br /&gt;
0LWoJvHdQnRLkmvl9NjeKqOpxVDk00WIXhsI8tffpV7YHVxipRTHVhILkyuY4w+Z&lt;br /&gt;
HdikO3bciTZiS7OqGLnoJ5tY6HJaSQrLohiWgZqQz7I/Rbaax/t0YpkrzAYhewy3&lt;br /&gt;
AktV29pFs/VQNio4UUBZ4kHpZLxXztnI7wom9dOs4sqin2LnwV2PZ6thabWQJlsn&lt;br /&gt;
sR89i57cuVulYq45wAkaCZsbjNNdWonhlV7Bm7v90iu5jDGz9zVkcmt0X8H6Ys2U&lt;br /&gt;
zTWtYx5PCcKiqM4l2FRE97DsoZny1Sy/N9ZtHsyGcHIyMTyeNcZr4vjWGOrA6UYs&lt;br /&gt;
yTqYVw+NhF6GwehdWmIpIgxk3VBMr1kbJDzYExJCt4x8J9PVA3o8eUQlJW2Y/0NY&lt;br /&gt;
q0lzWeeiZSAIt89AVH1witszaeJjPDwNXDdtduIZXgA1lCIoBIVmE/7C5z9cBe0K&lt;br /&gt;
Nz6F4g+GQ5/Isj9sd9OT4WshfcWjZqsVSnk8VzJTYorMjNTSdgqJmX9y/ieBtDFw&lt;br /&gt;
+FV4jKlBRYoGmDNEuJm3HdbaRz63DDxTpq+xhVK4+lgkGZsFQpRxLuJxv5C55UoH&lt;br /&gt;
vS3OD1ICMtLmn2oYxaGkwEctGE/G1I0FKThKw5x7ygvxmSuXqS7cjiUrV2stsF2I&lt;br /&gt;
lcI6poj5s0YoZaUqRzd4nyBHRG2IgR4rb2vsSQnVNAV0pVdW+7eQYDx74ojZ1pTE&lt;br /&gt;
V+pBsE+xB2tzdpcREmsYPB5huy6h5aQASU2OWFgTHP198wSUrquEF9PbmAhc/qI2&lt;br /&gt;
X2Qn00jkBzE/cRDKa9Mw7p3dQjowFtKKW0XAl2pyWoPQc2S9BItK9aFqCpd/NbQ8&lt;br /&gt;
7FpK3Gr3aK31tJnPJuX7mD0ziZq8i8B9JymoHr+i+Zm/rrbNd+HgYgTsymz5+qi+&lt;br /&gt;
vkz/F8LZFVSI+Tg4T+T7Mf5HXV9GuI0BuzD23YdCXGIK1MHRD60swnlBDtA6jgQH&lt;br /&gt;
oSqT4QIjUPq84UXZiPKheQVnYHvGTJUWikMU/a6/LkbbXKiy6f0oxlEM/9sgVOKn&lt;br /&gt;
qXz7jdBDJP8SS9WmLvcDtLGNwTWwKfsOF9TsbnqqxhjQ+OmlH6Usgeiw5DW4ppO4&lt;br /&gt;
2cKfWHhMHBeQY5osL1FeyVdqwTqkAv8T6mV3mgCFXc664BYq2XAori40cJWPiX/W&lt;br /&gt;
3SX4PoRYPkwkWObL6QXcF6uaM/GbMk6SMGn7LryOSI1dFRAymgAdVaWkiKtiDfAO&lt;br /&gt;
ilViCE4V3ABea+OvMUxQ6DQ0Ei5RzaGlteuhm6AlKJzOBbBbhc9DABJUGw0Bqlbb&lt;br /&gt;
JWBCoM3CIyTbN6hmxCKhh/wwTil2dNTYrikHrdlrqRhLqtq2s5OlJpM0l/0H4AUu&lt;br /&gt;
mJYBmXHPQTVmqaYePgQiFY3dnk7P8nOZKav1HAgxWSMj1GjlpkRYlRFsWLx345Dt&lt;br /&gt;
YyRVjT96SLpVSV1HMMxq/Ev1hm9mb2tJo89kxYgVbGiAIdeeCOQi+SFcLn6xGVUb&lt;br /&gt;
UJIaMmbQraiAS7EG0oRDyQB96Zfx/Ku7r9ABqnRVj/c0wxwcMIYNOSjwqztQvly1&lt;br /&gt;
njsojGoAPdnzzL8zRf7p1iygg5OWxehdUJBBX8CLYUL9oBs3SCm6SLcmLZ/ARtJY&lt;br /&gt;
owD3LyGlTkJKexg3TysL3hPBX7sI/Jc8NZcj6IwUZ9vX&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado (CSR, Certificate Signing Request) que contiene la información del certificado junto con la clave pública, y es lo que envía a las autoridades certificadoras para ser firmada (generar el certificado de confianza). En este caso seremos nosotros quien la firmaremos y no por una autoridad certificadora. En dicha solicitud habrá que rellenar una serie de datos como se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoRaiz.key -out certificadoRaiz.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dato: ''-key'' nos pide la clave privada del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Las Palmas&lt;br /&gt;
Locality Name (eg, city) []:Las Palmas de Gran Canaria&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudianteSL&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudianteSL&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudianteSL.com&lt;br /&gt;
Email Address []:correo1@ulpgc.es&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoRaiz.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC+zCCAeMCAQAwgbUxCzAJBgNVBAYTAkVTMRMwEQYDVQQIDApMYXMgUGFsbWFz&lt;br /&gt;
MSMwIQYDVQQHDBpMYXMgUGFsbWFzIGRlIEdyYW4gQ2FuYXJpYTEVMBMGA1UECgwM&lt;br /&gt;
ZXN0dWRpYW50ZVNMMRUwEwYDVQQLDAxlc3R1ZGlhbnRlU0wxHTAbBgNVBAMMFHd3&lt;br /&gt;
dy5lc3R1ZGlhbnRlU0wuY29tMR8wHQYJKoZIhvcNAQkBFhBjb3JyZW8xQHVscGdj&lt;br /&gt;
LmVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9ELs4JySnm3tWGKp&lt;br /&gt;
k2XRlHjNelLNdZL1b/S2wKcaAbMh0tIUU3/7DK1q9HQItb29CAA5J3oHs/3gaR1/&lt;br /&gt;
1pZi8oh7qMFUbpDaqj8V9/Ir/a4YLp35etzAeAMzI32L8eTLqO5eoJeVS4k8K6S6&lt;br /&gt;
wF5YdoEwTA1LXd0XLLLzTXvRc1YmzfKRG+KFX/EocIxQU4kSQpaGFgfMwIf7jDBW&lt;br /&gt;
Yh7UZ/+gVDKAFPmhDzVxAupEZCIljLm4XLwbD+2+a3FXWr08NFDdn8NBJyWxLQ4K&lt;br /&gt;
1wAX9ErmRDeNQce9rMAI6HL+xBW3OaytApDKkI5aYgbCoIBJzah2HOllXSEKzdET&lt;br /&gt;
/uC5NwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAMss/OQ0MkUvcgR3yXU+gkWG&lt;br /&gt;
NAsTwgN/DTkKZluelHnZofbMHv96fwp1mdUfxWJYoUJpdzd2lxdoTNsZypBA5w+x&lt;br /&gt;
ajVAH8XpAWvKV5WvApvRlKCBfBJYj0dYvmhMdGxEmn84LKL7Y5etH3J2hHHCp9yP&lt;br /&gt;
8264mbPcSgd2eJ650A4nR3rBrNB2F+eOMK4fnI+6q7COcvorsh7tmT6QYkcgtWWf&lt;br /&gt;
CzS7LTWVZ6WUGNRiemGcA29pRzqgPzHypeXU3+nfo9bFXSZp+dudczxDU42bsAwk&lt;br /&gt;
h5nkqBKFn89J5FNchHdwpcMJiVL7Q2sXeUH5hdEZzuZcYIZv3Zb1ACqrIXORsYw=&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Finalmente, pasaremos a generar el certificado autofirmado utilizando nuestra clave privada. El comando '''&amp;quot;openssl x509&amp;quot;''' se utiliza para firmar solicitudes y verificar certificados. La opción &amp;quot;-req&amp;quot; indica que se intenta crear un certificado a partir de una solicitud desde el archivo especificado por &amp;quot;-in&amp;quot;. El certificado será guardado con el nombre que indica &amp;quot;-out&amp;quot; y será válido por &amp;quot;-days&amp;quot; días a partir de la fecha actual del servidor. Por último, el parámetro &amp;quot;-signkey&amp;quot; indica la clave con la que será firmado el certificado, la cual (en este ejemplo) es la propia clave privada del certificado emitido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 7300 -in certificadoRaiz.csr -signkey certificadoRaiz.key -out certificadoRaiz.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
Getting Private key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Verificamos que el certificado autofirmado se ha creado correctamente. Primero habrá que introducir el certificado de la autoridad certificadora, en nuestro caso es el certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert certificadoRaiz.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoRaiz.cert: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra manera de ver las características del firmante (issuer) y del firmado (subject) sería ejecutando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -text -noout -in certificadoRaiz.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            39:40:8e:71:94:8c:aa:0d:74:58:17:40:4b:e9:01:5c:a0:4e:98:16&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:04:45 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:04:45 2038 GMT&lt;br /&gt;
        Subject: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:f4:42:ec:e0:9c:92:9e:6d:ed:58:62:a9:93:65:&lt;br /&gt;
                    d1:94:78:cd:7a:52:cd:75:92:f5:6f:f4:b6:c0:a7:&lt;br /&gt;
                    1a:01:b3:21:d2:d2:14:53:7f:fb:0c:ad:6a:f4:74:&lt;br /&gt;
                    08:b5:bd:bd:08:00:39:27:7a:07:b3:fd:e0:69:1d:&lt;br /&gt;
                    7f:d6:96:62:f2:88:7b:a8:c1:54:6e:90:da:aa:3f:&lt;br /&gt;
                    15:f7:f2:2b:fd:ae:18:2e:9d:f9:7a:dc:c0:78:03:&lt;br /&gt;
                    33:23:7d:8b:f1:e4:cb:a8:ee:5e:a0:97:95:4b:89:&lt;br /&gt;
                    3c:2b:a4:ba:c0:5e:58:76:81:30:4c:0d:4b:5d:dd:&lt;br /&gt;
                    17:2c:b2:f3:4d:7b:d1:73:56:26:cd:f2:91:1b:e2:&lt;br /&gt;
                    85:5f:f1:28:70:8c:50:53:89:12:42:96:86:16:07:&lt;br /&gt;
                    cc:c0:87:fb:8c:30:56:62:1e:d4:67:ff:a0:54:32:&lt;br /&gt;
                    80:14:f9:a1:0f:35:71:02:ea:44:64:22:25:8c:b9:&lt;br /&gt;
                    b8:5c:bc:1b:0f:ed:be:6b:71:57:5a:bd:3c:34:50:&lt;br /&gt;
                    dd:9f:c3:41:27:25:b1:2d:0e:0a:d7:00:17:f4:4a:&lt;br /&gt;
                    e6:44:37:8d:41:c7:bd:ac:c0:08:e8:72:fe:c4:15:&lt;br /&gt;
                    b7:39:ac:ad:02:90:ca:90:8e:5a:62:06:c2:a0:80:&lt;br /&gt;
                    49:cd:a8:76:1c:e9:65:5d:21:0a:cd:d1:13:fe:e0:&lt;br /&gt;
                    b9:37&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         0a:44:eb:08:3c:29:9d:1e:70:08:3e:ae:f3:be:86:f0:45:df:&lt;br /&gt;
         6b:4e:33:62:da:6b:40:66:65:10:5e:ef:db:e7:f6:5f:57:92:&lt;br /&gt;
         55:5a:e4:cb:39:9b:b2:25:ca:c1:b3:72:4d:c2:58:1d:91:ad:&lt;br /&gt;
         2c:a7:2d:a9:b9:5a:0f:f9:e0:d4:70:86:04:23:fe:22:1d:d3:&lt;br /&gt;
         d5:97:6b:7c:a8:f4:32:37:a8:47:bc:fc:c1:f2:5c:67:89:05:&lt;br /&gt;
         c5:fc:a2:44:a2:e9:59:77:71:59:04:2e:fa:df:6d:56:9c:45:&lt;br /&gt;
         64:ac:be:5e:d4:33:30:6f:63:1b:3d:21:6f:65:da:df:9a:1c:&lt;br /&gt;
         5c:27:54:c0:8e:0b:57:48:50:87:a3:9f:ed:65:9d:1f:77:92:&lt;br /&gt;
         0b:7a:e3:ed:68:df:9a:c1:fb:80:05:54:f6:1d:dc:3d:a7:73:&lt;br /&gt;
         c5:fc:41:03:a8:36:f2:40:96:56:73:57:e4:55:1a:c5:b6:94:&lt;br /&gt;
         5a:1f:19:7a:af:0e:eb:c0:32:2b:30:01:69:2d:c9:dc:ac:2a:&lt;br /&gt;
         bd:ca:c4:86:86:81:a5:99:f5:1d:4f:d8:a6:5f:4d:72:97:36:&lt;br /&gt;
         15:6a:f5:28:a1:18:d9:a7:7b:c9:89:d1:ee:c9:f6:a9:5f:29:&lt;br /&gt;
         52:bc:b9:2c:b4:f8:4d:48:1d:62:3e:4f:87:b1:a5:f5:90:92:&lt;br /&gt;
         8f:fd:a3:e7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar tanto los datos del issuer como los del subject (en este caso son los mismos). Además, se observa la clave pública en hexadecimal (2048 bits) y la firma del issuer en hexadecimal, que contiene todo los datos del certificado incluyendo la clave pública (se le aplica una función de resumen y posteriormente, un algoritmo de cifrado).&lt;br /&gt;
&lt;br /&gt;
'''Dato:''' destacar que si posee un &amp;quot;Certificado.key&amp;quot; de alguna autoridad de confianza, se podría usar a la hora de firmar el nuevo Certificado creado por nosotros y así, obtener un certificado autofirmado con la clave privada de dicha autoridad.&lt;br /&gt;
&lt;br /&gt;
=== Certificado Intermedio ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado intermedio RSA que contendrá la clave privada cifrada en AES y la usaremos para firmar el certificado final en el siguiente apartado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoIntermedio.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...............................................................................................+++++&lt;br /&gt;
..........+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.key &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIS4RhdKnGb28CAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDgcEiWqDyYE6Hiln0++0q+BIIE&lt;br /&gt;
0CBcD8ObCTPSdNhT7Ef/35zatD9uStTNj9ZytjmoSY5E1Z+HaG2B50c15m3/YOdV&lt;br /&gt;
ooYu/M0MLwkoOrTW19gmwhsIjfv4tIK5XIDbyUlo+1c2QsPbiNJAoT7p9FA5axD9&lt;br /&gt;
Op62GiTju2VszXWdGCAVlDpJ8vG9aBYmi2JTTq8Gdb/ofX7l1nerdMkUHeke9ajW&lt;br /&gt;
foT1PriuFZxiinjeYr1JmW9zUYwwC5DylKzwHXNG5tD07Ds23dWGYmPa53SCMVAl&lt;br /&gt;
9ORu8mPo8DGbV5487sUL+RQDtzwXjLj+O0TPid37wuW/fnn8hYY4DqW4Hdn4rn8v&lt;br /&gt;
k4JywWqg3Se1BZ7FCx1IYOWpPZP8Qmcn2sTQKBlNHiZ73W6Izo9UOus34D6Ik6gH&lt;br /&gt;
1x2Fsv/KqiAJts+I7NVxDuMxy2J04M+1M8nfeZdvejUxo9Tq3YYvrxvWi3ncC3aQ&lt;br /&gt;
QJqYpsOJGPHycSS/1XgCmQjbxqdJya+ZbA9SSxhVJbfCC1+WaPuGWuElVKA8SWh1&lt;br /&gt;
paIMLhJyjNJCOiHmEyHohwbs2HMWB6XuCpwzetxK+E4nw+NzqnREvZ7CwKZnsWxl&lt;br /&gt;
E6LhxOJS74CbbkmTOF+z2K8PPK+hyy5vzyOD2HqykmOiZ76m1Bre22Zw10IJJHot&lt;br /&gt;
85YtJax5L24mWXDpLgU2pWxe/ZaXYIMwLmP42lhO2mb9uGNaMFMgJ3CjTlw7DLRJ&lt;br /&gt;
xYf5LOX6R9uAfMU744y8l0datosBIiFpuC0UT6qJj1G6fpsG4ynC3zHJ4aqHXTZe&lt;br /&gt;
bEjrNKRpAYGqlIeB1fzMmqTuXLGvMzuuaFDliN/8y79uD+zCTKSjukChB3vWsYvn&lt;br /&gt;
PT+l6tmWPbUhMlZatYRmODeoZL12Xu4KiYIFR64TWf8iWxznA19MzQ5sxYVozqAu&lt;br /&gt;
LUJW3f9idO2JtbkDmXXrFiWMoa1ZJpQ4H37tN9lBf/lYoBBvf6nEp74M0itPTiMc&lt;br /&gt;
p/E44idOEDukhemijM6DzMWf2pdntvby1QMySq7+kU2NLJCFCSS1f+U/W1VlrdFg&lt;br /&gt;
73JbMMcxWbyME9WTU78+OAT84TGtTdpG3s9iPoEPRDKjeAr11EdRD/ooaRZ3NM8L&lt;br /&gt;
vdT1TRtScvb61DIcThvviTupm1MDpyp+WylxH2zU0rBSnhO+wWIHSq+NfJVh6qAI&lt;br /&gt;
J+X7pRndxHuHFB9mJXoFtXgF81E6DpS06jhY/UP2FaSnD6gq3DPva/DX6adpinou&lt;br /&gt;
r/zQvSFIrvRxu6RPIvBuiQnKZR7QCToGfB1TffUg7QyKx/2Qwe7w6hGAhCL5gICq&lt;br /&gt;
+DmeVo5UABgT0IPGI8iloRgSfgxP07rIhWn74tSD32IMncFhNjr1UWvLMhWIx1VM&lt;br /&gt;
G6WwrPb8dwh9Bow323xf+dY3plFuBf5aPmK5iMRg4BXM67WOu+sG7fDBh9jWsQXx&lt;br /&gt;
wjUyaWRoLJoobontZsGKCECSdgar4P4E6XrX0uz7xwDaYaJLTWQ4z+gD63u24gw4&lt;br /&gt;
fVFLCJBESEhkYNcIFCZhLKti1Zx1AVT/kK4h2DRkNAeFwbCx24AK8NEz9TBLWew8&lt;br /&gt;
N6v/s/0hDX4xYszTdCZFVf0CcZ2YgGyUIHJnuSYJk8DlOUUc84CW8vmmVrRI0BQF&lt;br /&gt;
2z1nduWHQh6GkeFHInyWGQSwSjP/2kf8/2l7l7GfVH3P&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoIntermedio.key -out certificadoIntermedio.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Sevilla&lt;br /&gt;
Locality Name (eg, city) []:Sevilla&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantesevilla&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantesevilla&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantesevilla.com&lt;br /&gt;
Email Address []:correo2@sevilla.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoIntermedio.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC9zCCAd8CAQAwgbExCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdTZXZpbGxhMRAw&lt;br /&gt;
DgYDVQQHDAdTZXZpbGxhMRowGAYDVQQKDBFlc3R1ZGlhbnRlc2V2aWxsYTEaMBgG&lt;br /&gt;
A1UECwwRZXN0dWRpYW50ZXNldmlsbGExIjAgBgNVBAMMGXd3dy5lc3R1ZGlhbnRl&lt;br /&gt;
c2V2aWxsYS5jb20xIjAgBgkqhkiG9w0BCQEWE2NvcnJlbzJAc2V2aWxsYS5jb20w&lt;br /&gt;
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0S/s2FfY19DDt+u3OOx1I&lt;br /&gt;
DlBiDtMhAC1WdyIReaKNvNZuiSBb5/oIn7zkl3BjLfsD1efLNr75lNXnWsNiHtV+&lt;br /&gt;
9ifyJtlS+UQzjiVoAKrNnBklSo0sMKX/VmKRG+qjQh51yBCQbzQN5lR2ABcbCksp&lt;br /&gt;
FGMu3t3ipPkMnk6kjpZzXPblVFnjMD4dYLvm6qAp+apWliZGl3g0Pxe/77S2tGn0&lt;br /&gt;
tscDqVv+Kxo4aAwfPZtwFmnZ+3X/Mk5Q7h05gbZ/20hGPCTkvFkIOseXCRWX7gSa&lt;br /&gt;
ZCMYJAVZL+Bxv//Ir+qkQbtMbkdbibOYj6J0BlaTylVAft/aE0BDIqJ+kA6s9Hdp&lt;br /&gt;
AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAjyAY+eTNUHu8jh8pwe+t2icOPy3X&lt;br /&gt;
LV+nugeTcepWDybI+r2Wx80iNodA/bfhIzeEfvZgykMHOG8Kk0PaFwMrK+SeaGbQ&lt;br /&gt;
V470X+NE30f3a6GRRTmn56Eo6OxXSwOk+A7UdJrq2hDSo4e17osG1hgZeMuvu9+/&lt;br /&gt;
bh2r2krd0q5tydHKuE+mKspNz+v1KG4gXIrLgIPN/NoPiWhwUnXS+RXUV06L1yxT&lt;br /&gt;
QbbTn9Cyf5MEHNY4mz/D2i6PscbjEqGp9Tu6094UHdUvk5gRo3TtxiLOlNyzvHjM&lt;br /&gt;
SOM3ZCWjCxz1G7meqfe8lfHyvRAx4Q8ZQOnImNaxkaQ5YcMJkOJTQ6OrxQ==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado intermedio con la clave privada del certificado raíz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoIntermedio.csr  -CA certificadoRaiz.cert -CAkey certificadoRaiz.key -CAcreateserial -out certificadoIntermedio.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoRaiz.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostramos el certificado con más detalles como hicimos con el certifiado anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            45:45:ad:07:94:35:09:9f:43:69:67:e6:79:01:b7:65:23:bd:d5:19&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Las Palmas, L = Las Palmas de Gran Canaria, O = estudianteSL, OU = estudianteSL, CN = www.estudianteSL.com, emailAddress = correo1@ulpgc.es&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 16:29:35 2018 GMT&lt;br /&gt;
            Not After : Dec 13 16:29:35 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:b4:4b:fb:36:15:f6:35:f4:30:ed:fa:ed:ce:3b:&lt;br /&gt;
                    1d:48:0e:50:62:0e:d3:21:00:2d:56:77:22:11:79:&lt;br /&gt;
                    a2:8d:bc:d6:6e:89:20:5b:e7:fa:08:9f:bc:e4:97:&lt;br /&gt;
                    70:63:2d:fb:03:d5:e7:cb:36:be:f9:94:d5:e7:5a:&lt;br /&gt;
                    c3:62:1e:d5:7e:f6:27:f2:26:d9:52:f9:44:33:8e:&lt;br /&gt;
                    25:68:00:aa:cd:9c:19:25:4a:8d:2c:30:a5:ff:56:&lt;br /&gt;
                    62:91:1b:ea:a3:42:1e:75:c8:10:90:6f:34:0d:e6:&lt;br /&gt;
                    54:76:00:17:1b:0a:4b:29:14:63:2e:de:dd:e2:a4:&lt;br /&gt;
                    f9:0c:9e:4e:a4:8e:96:73:5c:f6:e5:54:59:e3:30:&lt;br /&gt;
                    3e:1d:60:bb:e6:ea:a0:29:f9:aa:56:96:26:46:97:&lt;br /&gt;
                    78:34:3f:17:bf:ef:b4:b6:b4:69:f4:b6:c7:03:a9:&lt;br /&gt;
                    5b:fe:2b:1a:38:68:0c:1f:3d:9b:70:16:69:d9:fb:&lt;br /&gt;
                    75:ff:32:4e:50:ee:1d:39:81:b6:7f:db:48:46:3c:&lt;br /&gt;
                    24:e4:bc:59:08:3a:c7:97:09:15:97:ee:04:9a:64:&lt;br /&gt;
                    23:18:24:05:59:2f:e0:71:bf:ff:c8:af:ea:a4:41:&lt;br /&gt;
                    bb:4c:6e:47:5b:89:b3:98:8f:a2:74:06:56:93:ca:&lt;br /&gt;
                    55:40:7e:df:da:13:40:43:22:a2:7e:90:0e:ac:f4:&lt;br /&gt;
                    77:69&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         7a:23:17:f5:02:a0:34:6c:a0:c6:c3:24:80:68:91:42:4a:57:&lt;br /&gt;
         7b:5a:f2:d0:be:cc:56:ed:d1:3c:47:d9:90:a4:2a:4e:bc:ff:&lt;br /&gt;
         ca:cb:fa:a7:bc:96:02:ab:c6:07:74:42:5e:ff:2f:ea:89:67:&lt;br /&gt;
         fe:8b:29:e6:58:f5:4e:ea:b1:18:81:43:d7:2b:55:27:ab:22:&lt;br /&gt;
         3b:30:30:e1:e6:d3:cb:df:40:aa:96:9f:12:73:a2:2a:88:3a:&lt;br /&gt;
         cd:a8:48:ff:66:81:09:77:63:90:ac:ee:54:84:84:a0:ce:92:&lt;br /&gt;
         05:47:7c:83:ea:f2:24:a8:e2:6d:58:1f:ed:ba:28:6e:9f:74:&lt;br /&gt;
         4f:08:ad:db:da:8b:dc:60:df:37:8d:04:9f:df:f8:bd:75:c8:&lt;br /&gt;
         f2:e8:c4:1c:67:03:cf:51:2c:ba:c4:ee:ee:d8:70:75:af:86:&lt;br /&gt;
         bd:90:ce:df:f2:ff:47:86:56:a1:7c:ad:2a:3a:d0:27:3b:da:&lt;br /&gt;
         d5:b5:63:dd:71:e0:2a:23:70:c9:ae:91:a7:bb:33:91:00:e2:&lt;br /&gt;
         e3:0c:dd:29:f5:31:81:0a:37:63:6d:38:3c:33:43:c6:5d:5b:&lt;br /&gt;
         31:ac:ae:df:cc:15:ab:e5:cb:59:32:d6:3e:c2:c6:7c:f0:93:&lt;br /&gt;
         38:4f:71:fd:4c:62:b9:46:67:b7:8b:28:4b:0f:d9:9a:90:fb:&lt;br /&gt;
         96:5e:12:a5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia del certificado raíz, vemos que el issuer (certificado raíz) y el subject (certificado intermedio) son diferentes.&lt;br /&gt;
&lt;br /&gt;
;Paso 6 &lt;br /&gt;
&lt;br /&gt;
Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert certificadoIntermedio.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
certificadoIntermedio.cert: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificado final ===&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Generamos el certificado final RSA que contendrá la clave privada cifrada en AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl genpkey -algorithm RSA -aes256 -out certificadoFinal.key -pkeyopt rsa_keygen_bits:2048&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..........................................+++++&lt;br /&gt;
...................+++++&lt;br /&gt;
Enter PEM pass phrase:&lt;br /&gt;
Verifying - Enter PEM pass phrase:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver nuestra clave privada generada en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoFinal.key  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI3n1R+/GOo3ECAggA&lt;br /&gt;
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50vRF+Pt+1D4ywzkUNjgTBIIE&lt;br /&gt;
0AoPGQ+xq4bYGxrEERVqVCqU6CPMpYU/+isUKyMNsEKoWiGTXJNTlqnTK4wN82rV&lt;br /&gt;
JhPr3tdFmPrwkI29qfiLcgDf2opnQm2pkXhEjpA67UWdFKmDEasS8wW5ro3LagMj&lt;br /&gt;
VDXkSfgIGeAxFz1yCcvVrsfpcFleXAWQ4ZAwfxrEzO2sJe5fPa+uKDNhNKXHaScH&lt;br /&gt;
WlxqrhxhCAgDs8tptDKi1LfjnXDEvGzkR7DRrrc56aM/WpUCv/a/26zQ6IHUheB6&lt;br /&gt;
cupO3zR4yEkq7Fx3aKSvu1RS0y9yIcX+VwIzAdElp989gXNsH2Z9qJHxTf0SlA6X&lt;br /&gt;
gppuHMJMEXmuf69ronna3DMwPCwtmOtRPvKp4G8hdoUgXcznIbJfu8Iq76YMTR56&lt;br /&gt;
LQ4yw5+USXy291jY2+L7Z657tywL8quvaV1OzXzjfajgDDoYMI70TvsP0HoqBKHF&lt;br /&gt;
CPSBK/pwwyziQjppj2rczriWLMWOKP5AnWmelW9RQle6C448UERAYR443VSW3Nzp&lt;br /&gt;
KkwFGjNDo8LLYS6M30pn81pTh+YUhRZdi4gh4hwHkJVBUozrxwkjiK4LtYrwWBD3&lt;br /&gt;
BGHPqP6FJ4jylSdOGhrsN63WwiiQFMyft/1SREU3iv6MClp4P9Ib019KTFbdtgmC&lt;br /&gt;
YTzeGRm80yBl7oEaXqIMdeYv4RrUwzD1TSQd+pXU/Dv2ojmLbDkWS4uYMvZ4EcCD&lt;br /&gt;
0x5CcL6JX45BH7e2iRPR4sA31ClB8TWIMjtc/x2g0I6ui3uVayw7MggjQTIgAnB7&lt;br /&gt;
IWKtuvLUiSXpLlNXc7dhYqkWNq5jmBvzwWN2otGVAP5etRt10LlF24aghJtpv9IZ&lt;br /&gt;
bc5oLloUOTxaIV681t9nKKdFLV9vnp9HwbEPhcL55eYmUJfdVkdZStnM1KYoY+S4&lt;br /&gt;
8QBHDBE4NvU04Di7R64ROpGGviGlYRsU6g7AQHL30ErEC78kC/7lknpZYZfXDIbz&lt;br /&gt;
M6HLHRJuzIrX+bgvsRpTRa6fCsq9ch1YkkTjPy5lqecPxLQ1tcfLPwXlJCjQsnV1&lt;br /&gt;
RY4L4BJbnMpKw9vfDT1q/o2N17D0N2StxzyMHIw+aWF0+pgmF66d9pGfavhaykBu&lt;br /&gt;
W+YOlEltX3we07jfIf4AisPoAi5k+iNSextqaQtk+Co2aVkBrh4dRyBmpE/uYRi1&lt;br /&gt;
0OWnJJsb1pCUafNreIdS8g6FUxoCzW0hkiSnG9lrHXmNxz3bj2fD1UQtn8z/wJaD&lt;br /&gt;
qXpUFGc2zcXtynI9n5FmP5sAfbxPxoSHKf0/tbov6l0ndZJoZ9AY01wmuLwqk889&lt;br /&gt;
E+Z0cSmm4xOdDCavqMlkG2OS+rGu04U+TrBN8bFY+lSNnNYmOj09m0AlCVCc0lgM&lt;br /&gt;
Zi/LeV9rxIYBrZ/WjT4LVOdDzr6IM0Mm5iFLFKrBwjqLl3XebckGgolIt0zDDZRh&lt;br /&gt;
R5Yan1YZnGtXxZrFyy+X0p743MEBAwNU9U6uGP+OTsBupUoUggAmXLExK3oIM1IX&lt;br /&gt;
JwEi94m+TmRc0z6ovydqclCb9B2/fiNyhdfoghRDFQTU4a4KHSRDHaJOYxR/4mPv&lt;br /&gt;
v/JKrA+MJIJJ+YiPHIsDs1rYo+SkqpqqnsW6cZ6sHCScy4JwmGFYJU8gLTPWJkoE&lt;br /&gt;
P0iH+2VAay9UU2K7KnmANYP9o3uEouB268MlrjwDWLi7&lt;br /&gt;
-----END ENCRYPTED PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
A continuación generamos una solicitud de firma de certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; openssl req -new -key certificadoFinal.key -out certificadoFinal.csr &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoFinal.key:&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter '.', the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]:ES&lt;br /&gt;
State or Province Name (full name) [Some-State]:Tenerife&lt;br /&gt;
Locality Name (eg, city) []:Tenerife&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:estudiantetf&lt;br /&gt;
Organizational Unit Name (eg, section) []:estudiantetf &lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:www.estudiantetf.com&lt;br /&gt;
Email Address []:correo3@tf.com&lt;br /&gt;
&lt;br /&gt;
Please enter the following 'extra' attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 4&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado pendiente de firma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; cat certificadoFinal.csr  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE REQUEST-----&lt;br /&gt;
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5lcmlmZTER&lt;br /&gt;
MA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEVMBMGA1UE&lt;br /&gt;
CwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRmLmNvbTEd&lt;br /&gt;
MBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUA&lt;br /&gt;
A4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpIKHh2icH9&lt;br /&gt;
VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1u0hjseNW&lt;br /&gt;
zRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR5QvaOokd&lt;br /&gt;
jwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0ArcmckLz7uwD&lt;br /&gt;
xO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3Sxmnk1I3&lt;br /&gt;
p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAGgADANBgkqhkiG9w0B&lt;br /&gt;
AQsFAAOCAQEACGE5iJWotxCBY8/MP6xJVpZb4/1HNGeCa2XSNPXw3BwKFYT6Pm6Q&lt;br /&gt;
mvA0HLLG5mysPOKl77PAtmvK2BmJJHMC+t3qlGMzmIIYOjWl0RaskxSloGa8dJB8&lt;br /&gt;
WuwlK2F37ss8BRTkZT2lVfiaGou073x7XSKRJSGDbuuTlSwHiL0NSCIUzWr8qjmb&lt;br /&gt;
Jb4mdKksesKblX8l1hmaU3Y4xIjv9ts8bLgi2aSQtvzvg8O0uio/6nv7pLwIUpmO&lt;br /&gt;
LZHMXY7ELhCGp+NbNTg8IUTJQhlHKTtq7CfEfGsKJYxLXTxqVtvpT1m9zQxsIa4h&lt;br /&gt;
unJ2xh9mnhoCeH5BKZCqWTyM2cG2G/oifw==&lt;br /&gt;
-----END CERTIFICATE REQUEST-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 5&lt;br /&gt;
&lt;br /&gt;
Firmamos el certificado final con la clave privada del certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -req -days 360 -in certificadoFinal.csr  -CA certificadoIntermedio.cert -CAkey certificadoIntermedio.key -CAcreateserial -out certificadoFinal.cert&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Signature ok&lt;br /&gt;
subject=C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
Getting CA Private Key&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para verificar este certificado tenemos que ir al apartado siguiente. Aunque podemos ver con detalle los datos del certificado final como hemos hecho con los dos anteriores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Certificate:&lt;br /&gt;
    Data:&lt;br /&gt;
        Version: 1 (0x0)&lt;br /&gt;
        Serial Number:&lt;br /&gt;
            21:1c:7c:90:69:98:8e:09:0c:e3:b7:55:77:fb:5d:8b:b0:04:f3:6f&lt;br /&gt;
        Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
        Issuer: C = ES, ST = Sevilla, L = Sevilla, O = estudiantesevilla, OU = estudiantesevilla, CN = www.estudiantesevilla.com, emailAddress = correo2@sevilla.com&lt;br /&gt;
        Validity&lt;br /&gt;
            Not Before: Dec 18 18:13:59 2018 GMT&lt;br /&gt;
            Not After : Dec 13 18:13:59 2019 GMT&lt;br /&gt;
        Subject: C = ES, ST = Tenerife, L = Tenerife, O = estudiantetf, OU = estudiantetf, CN = www.estudiantetf.com, emailAddress = correo3@tf.com&lt;br /&gt;
        Subject Public Key Info:&lt;br /&gt;
            Public Key Algorithm: rsaEncryption&lt;br /&gt;
                RSA Public-Key: (2048 bit)&lt;br /&gt;
                Modulus:&lt;br /&gt;
                    00:a4:38:88:07:72:68:50:8c:27:96:0b:02:6b:b3:&lt;br /&gt;
                    96:f6:a8:ab:ae:d8:32:6e:e3:15:c1:c0:9a:48:28:&lt;br /&gt;
                    78:76:89:c1:fd:55:a3:ec:b9:48:c6:13:5c:8c:5f:&lt;br /&gt;
                    28:4e:e6:99:72:76:fb:5b:bc:2c:a3:54:20:d2:1f:&lt;br /&gt;
                    ac:d4:9c:49:7b:48:21:fa:7c:d9:3d:80:1f:a7:99:&lt;br /&gt;
                    34:35:bb:48:63:b1:e3:56:cd:13:5f:c3:73:2c:54:&lt;br /&gt;
                    b1:d5:82:c0:52:76:7f:7a:d1:14:8b:3b:fb:b3:62:&lt;br /&gt;
                    f2:54:a6:6b:d1:a9:4d:c0:cf:da:22:a4:1d:b0:ad:&lt;br /&gt;
                    11:74:ed:89:51:e5:0b:da:3a:89:1d:8f:07:4e:96:&lt;br /&gt;
                    c9:2a:a3:da:86:fd:d6:5c:a5:57:f5:71:58:41:b4:&lt;br /&gt;
                    e9:5f:b3:bf:bc:0f:d7:1c:37:85:b2:0f:47:04:fa:&lt;br /&gt;
                    b2:a5:c0:f1:74:02:b7:26:72:42:f3:ee:ec:03:c4:&lt;br /&gt;
                    ee:2f:ea:7f:46:87:ad:8f:5f:9c:21:80:29:14:c5:&lt;br /&gt;
                    7b:a7:e1:3f:0e:f6:4d:61:f5:16:ff:92:43:d0:65:&lt;br /&gt;
                    97:e0:9c:52:62:de:78:35:31:a6:b7:4b:19:a7:93:&lt;br /&gt;
                    52:37:a7:8b:9d:99:c1:1b:e3:cf:89:42:14:69:c1:&lt;br /&gt;
                    19:16:cc:55:4c:8b:7c:2e:0e:7f:ea:ee:dc:da:77:&lt;br /&gt;
                    b0:75&lt;br /&gt;
                Exponent: 65537 (0x10001)&lt;br /&gt;
    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
         48:d8:73:d7:f0:9d:74:fa:34:f6:c5:9a:9c:ff:b4:ad:fe:86:&lt;br /&gt;
         29:68:4e:ca:33:df:d8:8a:e3:68:c2:87:b1:8b:de:b9:1c:44:&lt;br /&gt;
         b7:69:b2:25:7f:a5:d1:9a:8b:57:d5:29:23:3f:63:1d:a2:16:&lt;br /&gt;
         23:1e:16:5b:b1:23:1f:96:7b:90:83:d6:01:27:2c:db:30:dc:&lt;br /&gt;
         57:06:0b:4f:1d:3e:95:95:75:fb:9b:b3:c9:57:05:ad:9e:90:&lt;br /&gt;
         3e:dc:48:e7:83:93:d3:12:65:38:fa:90:45:a9:46:05:af:4e:&lt;br /&gt;
         e7:84:0b:52:fb:e2:ce:57:ac:a0:1b:7d:9d:ef:2d:4a:07:f2:&lt;br /&gt;
         8e:3f:5d:6e:1e:a6:47:c3:77:7f:16:69:0a:43:89:4c:a8:e3:&lt;br /&gt;
         40:59:82:da:1c:78:f4:09:84:e0:22:ff:00:16:ae:aa:15:4e:&lt;br /&gt;
         42:fb:51:23:d1:19:d2:2b:e8:ce:24:b6:38:0a:b7:43:00:f2:&lt;br /&gt;
         53:8c:9e:15:28:1c:d5:82:b3:d8:b9:0c:01:48:7f:94:a4:30:&lt;br /&gt;
         84:d8:cf:05:b8:a2:da:bc:f6:61:c2:09:4a:7e:9d:ce:90:2f:&lt;br /&gt;
         fc:01:76:e6:4c:c0:b0:44:ee:22:1e:43:a3:ed:56:64:28:c9:&lt;br /&gt;
         e0:7a:2b:19:71:26:2e:9d:78:4a:f1:71:31:25:60:bb:13:6a:&lt;br /&gt;
         8d:cf:ff:a1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, el issuer es el certificado intermedio y el subject es el certificado final.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Certificado &amp;quot;chain&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
En este apartado, concatenamos el certificado intermedio con el certificado final para verificar que este último se ha generado correctamente.&lt;br /&gt;
&lt;br /&gt;
;Paso 1&lt;br /&gt;
&lt;br /&gt;
Este certificado simplemente será la unión del certificado raíz con el certificado intermedio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoIntermedio.cert certificadoRaiz.cert &amp;gt; chain.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 2&lt;br /&gt;
&lt;br /&gt;
Hacemos un &amp;quot;cat&amp;quot; para ver el certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat chain.cert  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paso 3&lt;br /&gt;
&lt;br /&gt;
Procedemos a la verificación del certificado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert chain.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;chain.cert: OK &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cadena de certificados en un solo fichero ===&lt;br /&gt;
&lt;br /&gt;
En este caso, formaremos un solo fichero &amp;quot;.pem&amp;quot; que contendrá los tres certificados creados anteriormente. Es muy importante concatenarlos en el orden que se indica a continuación, sino daría errores como: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;error 20 at 0 depth lookup: unable to get local issuer certificate&lt;br /&gt;
error todos.cert: verification failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Juntamos los tres certificados en un solo fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat certificadoRaiz.cert certificadoIntermedio.cert certificadoFinal.cert &amp;gt; todos.cert &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Vemos el contenido del fichero creado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat todos.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID8zCCAtsCFDlAjnGUjKoNdFgXQEvpAVygTpgWMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjA0NDVaFw0zODEyMTMxNjA0NDVaMIG1MQswCQYDVQQGEwJFUzETMBEGA1UECAwK&lt;br /&gt;
TGFzIFBhbG1hczEjMCEGA1UEBwwaTGFzIFBhbG1hcyBkZSBHcmFuIENhbmFyaWEx&lt;br /&gt;
FTATBgNVBAoMDGVzdHVkaWFudGVTTDEVMBMGA1UECwwMZXN0dWRpYW50ZVNMMR0w&lt;br /&gt;
GwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNMLmNvbTEfMB0GCSqGSIb3DQEJARYQY29y&lt;br /&gt;
cmVvMUB1bHBnYy5lczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRC&lt;br /&gt;
7OCckp5t7VhiqZNl0ZR4zXpSzXWS9W/0tsCnGgGzIdLSFFN/+wytavR0CLW9vQgA&lt;br /&gt;
OSd6B7P94Gkdf9aWYvKIe6jBVG6Q2qo/FffyK/2uGC6d+XrcwHgDMyN9i/Hky6ju&lt;br /&gt;
XqCXlUuJPCukusBeWHaBMEwNS13dFyyy80170XNWJs3ykRvihV/xKHCMUFOJEkKW&lt;br /&gt;
hhYHzMCH+4wwVmIe1Gf/oFQygBT5oQ81cQLqRGQiJYy5uFy8Gw/tvmtxV1q9PDRQ&lt;br /&gt;
3Z/DQSclsS0OCtcAF/RK5kQ3jUHHvazACOhy/sQVtzmsrQKQypCOWmIGwqCASc2o&lt;br /&gt;
dhzpZV0hCs3RE/7guTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACkTrCDwpnR5w&lt;br /&gt;
CD6u876G8EXfa04zYtprQGZlEF7v2+f2X1eSVVrkyzmbsiXKwbNyTcJYHZGtLKct&lt;br /&gt;
qblaD/ng1HCGBCP+Ih3T1ZdrfKj0MjeoR7z8wfJcZ4kFxfyiRKLpWXdxWQQu+t9t&lt;br /&gt;
VpxFZKy+XtQzMG9jGz0hb2Xa35ocXCdUwI4LV0hQh6Of7WWdH3eSC3rj7WjfmsH7&lt;br /&gt;
gAVU9h3cPadzxfxBA6g28kCWVnNX5FUaxbaUWh8Zeq8O68AyKzABaS3J3KwqvcrE&lt;br /&gt;
hoaBpZn1HU/Ypl9Ncpc2FWr1KKEY2ad7yYnR7sn2qV8pUry5LLT4TUgdYj5Ph7Gl&lt;br /&gt;
9ZCSj/2j5w==&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID7zCCAtcCFEVFrQeUNQmfQ2ln5nkBt2UjvdUZMA0GCSqGSIb3DQEBCwUAMIG1&lt;br /&gt;
MQswCQYDVQQGEwJFUzETMBEGA1UECAwKTGFzIFBhbG1hczEjMCEGA1UEBwwaTGFz&lt;br /&gt;
IFBhbG1hcyBkZSBHcmFuIENhbmFyaWExFTATBgNVBAoMDGVzdHVkaWFudGVTTDEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZVNMMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZVNM&lt;br /&gt;
LmNvbTEfMB0GCSqGSIb3DQEJARYQY29ycmVvMUB1bHBnYy5lczAeFw0xODEyMTgx&lt;br /&gt;
NjI5MzVaFw0xOTEyMTMxNjI5MzVaMIGxMQswCQYDVQQGEwJFUzEQMA4GA1UECAwH&lt;br /&gt;
U2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxsYTEaMBgGA1UECgwRZXN0dWRpYW50ZXNl&lt;br /&gt;
dmlsbGExGjAYBgNVBAsMEWVzdHVkaWFudGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cu&lt;br /&gt;
ZXN0dWRpYW50ZXNldmlsbGEuY29tMSIwIAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNl&lt;br /&gt;
dmlsbGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEv7NhX2&lt;br /&gt;
NfQw7frtzjsdSA5QYg7TIQAtVnciEXmijbzWbokgW+f6CJ+85JdwYy37A9Xnyza+&lt;br /&gt;
+ZTV51rDYh7VfvYn8ibZUvlEM44laACqzZwZJUqNLDCl/1ZikRvqo0IedcgQkG80&lt;br /&gt;
DeZUdgAXGwpLKRRjLt7d4qT5DJ5OpI6Wc1z25VRZ4zA+HWC75uqgKfmqVpYmRpd4&lt;br /&gt;
ND8Xv++0trRp9LbHA6lb/isaOGgMHz2bcBZp2ft1/zJOUO4dOYG2f9tIRjwk5LxZ&lt;br /&gt;
CDrHlwkVl+4EmmQjGCQFWS/gcb//yK/qpEG7TG5HW4mzmI+idAZWk8pVQH7f2hNA&lt;br /&gt;
QyKifpAOrPR3aQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB6Ixf1AqA0bKDGwySA&lt;br /&gt;
aJFCSld7WvLQvsxW7dE8R9mQpCpOvP/Ky/qnvJYCq8YHdEJe/y/qiWf+iynmWPVO&lt;br /&gt;
6rEYgUPXK1UnqyI7MDDh5tPL30Cqlp8Sc6IqiDrNqEj/ZoEJd2OQrO5UhISgzpIF&lt;br /&gt;
R3yD6vIkqOJtWB/tuihun3RPCK3b2ovcYN83jQSf3/i9dcjy6MQcZwPPUSy6xO7u&lt;br /&gt;
2HB1r4a9kM7f8v9HhlahfK0qOtAnO9rVtWPdceAqI3DJrpGnuzORAOLjDN0p9TGB&lt;br /&gt;
CjdjbTg8M0PGXVsxrK7fzBWr5ctZMtY+wsZ88JM4T3H9TGK5Rme3iyhLD9makPuW&lt;br /&gt;
XhKl&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
MIID2TCCAsECFCEcfJBpmI4JDOO3VXf7XYuwBPNvMA0GCSqGSIb3DQEBCwUAMIGx&lt;br /&gt;
MQswCQYDVQQGEwJFUzEQMA4GA1UECAwHU2V2aWxsYTEQMA4GA1UEBwwHU2V2aWxs&lt;br /&gt;
YTEaMBgGA1UECgwRZXN0dWRpYW50ZXNldmlsbGExGjAYBgNVBAsMEWVzdHVkaWFu&lt;br /&gt;
dGVzZXZpbGxhMSIwIAYDVQQDDBl3d3cuZXN0dWRpYW50ZXNldmlsbGEuY29tMSIw&lt;br /&gt;
IAYJKoZIhvcNAQkBFhNjb3JyZW8yQHNldmlsbGEuY29tMB4XDTE4MTIxODE4MTM1&lt;br /&gt;
OVoXDTE5MTIxMzE4MTM1OVowgZ8xCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhUZW5l&lt;br /&gt;
cmlmZTERMA8GA1UEBwwIVGVuZXJpZmUxFTATBgNVBAoMDGVzdHVkaWFudGV0ZjEV&lt;br /&gt;
MBMGA1UECwwMZXN0dWRpYW50ZXRmMR0wGwYDVQQDDBR3d3cuZXN0dWRpYW50ZXRm&lt;br /&gt;
LmNvbTEdMBsGCSqGSIb3DQEJARYOY29ycmVvM0B0Zi5jb20wggEiMA0GCSqGSIb3&lt;br /&gt;
DQEBAQUAA4IBDwAwggEKAoIBAQCkOIgHcmhQjCeWCwJrs5b2qKuu2DJu4xXBwJpI&lt;br /&gt;
KHh2icH9VaPsuUjGE1yMXyhO5plydvtbvCyjVCDSH6zUnEl7SCH6fNk9gB+nmTQ1&lt;br /&gt;
u0hjseNWzRNfw3MsVLHVgsBSdn960RSLO/uzYvJUpmvRqU3Az9oipB2wrRF07YlR&lt;br /&gt;
5QvaOokdjwdOlskqo9qG/dZcpVf1cVhBtOlfs7+8D9ccN4WyD0cE+rKlwPF0Arcm&lt;br /&gt;
ckLz7uwDxO4v6n9Gh62PX5whgCkUxXun4T8O9k1h9Rb/kkPQZZfgnFJi3ng1Maa3&lt;br /&gt;
Sxmnk1I3p4udmcEb48+JQhRpwRkWzFVMi3wuDn/q7tzad7B1AgMBAAEwDQYJKoZI&lt;br /&gt;
hvcNAQELBQADggEBAEjYc9fwnXT6NPbFmpz/tK3+hiloTsoz39iK42jCh7GL3rkc&lt;br /&gt;
RLdpsiV/pdGai1fVKSM/Yx2iFiMeFluxIx+We5CD1gEnLNsw3FcGC08dPpWVdfub&lt;br /&gt;
s8lXBa2ekD7cSOeDk9MSZTj6kEWpRgWvTueEC1L74s5XrKAbfZ3vLUoH8o4/XW4e&lt;br /&gt;
pkfDd38WaQpDiUyo40BZgtocePQJhOAi/wAWrqoVTkL7USPRGdIr6M4ktjgKt0MA&lt;br /&gt;
8lOMnhUoHNWCs9i5DAFIf5SkMITYzwW4otq89mHCCUp+nc6QL/wBduZMwLBE7iIe&lt;br /&gt;
Q6PtVmQoyeB6KxlxJi6deErxcTElYLsTao3P/6E=&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl verify -CAfile certificadoRaiz.cert todos.cert   &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;todos.cert: OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PEM a PKCS#12 ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado en este documento, el formato &amp;quot;PKCS#12&amp;quot; almacena claves privadas y certificados en un solo archivo cifrado. Por ello, vamos a mostrar como se pasa de un formato a otro (usaremos el certificado intermedio para el ejemplo).&lt;br /&gt;
&lt;br /&gt;
; Paso 1&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que se nos pedirá la contraseña que usamos para proteger la clave y nos dará la posibilidad de cambiarla por una nueva. En ''&amp;quot;-inkey&amp;quot;'' se deberá introducir la clave privada y en ''&amp;quot;-in''&amp;quot; el certificado correspondiente a dicha clave (en caso contrario, clave y certificado no coincidirían y nos daría error). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;openssl pkcs12 -export -in certificadoIntermedio.cert -inkey certificadoIntermedio.key -out inter.p12&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter pass phrase for certificadoIntermedio.key:&lt;br /&gt;
Enter Export Password:&lt;br /&gt;
Verifying - Enter Export Password:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Paso 2&lt;br /&gt;
&lt;br /&gt;
Si hacemos un &amp;quot;cat&amp;quot; veremos que esta en binario y se hace imposible enter su contenido por eso siempre se recomienda usar &amp;quot;.pem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez en este formato, el certificado podrá ser importado junto con su clave privada en navegadores, agentes de correo, etc. No olvidemos que se solicitará la contraseña de protección de la clave privada.&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
{{listaref}}&lt;/div&gt;</summary>
		<author><name>Editor1</name></author>
		
	</entry>
</feed>