GNU/Linux >> Tutoriales Linux >  >> Linux

Operaciones de curva elíptica de línea de comando

OpenSSL® proporciona las siguientes herramientas de línea de comandos para trabajar con claves adecuadas para los algoritmos de criptografía de curva elíptica (EC):

  • openssl ecparam
  • openssl ec

Actualmente, OpenSSL admite los siguientes algoritmos EC:

  • Curva elíptica Diffie Hellman (ECDH) para acuerdo clave
  • Algoritmo de firma digital de curva elíptica (ECDSA) para firmar y verificar

ecparams y ec no es compatible con x25519 , ed25519 y ed448 curvas. Consulte la genpkey subcomando para obtener información sobre esas curvas.

Formatos de archivo de clave privada EC

OpenSSL utiliza archivos de correo con privacidad mejorada (PEM) para almacenar claves privadas de EC de forma predeterminada. Estos archivos contienen datos codificados en base 64 y usan el .pem extensión. El siguiente ejemplo muestra un archivo de clave privada en formato PEM.

-----BEGIN EC PRIVATE KEY-----
MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG
SM49AQECGQD////////////////////+//////////8wSwQY////////////////
/////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z
eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz
S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0
AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5
0g9/pw==
-----END EC PRIVATE KEY-----

El siguiente ejemplo muestra un archivo de clave privada cifrada en formato PEM.

-----BEGIN EC PRIVATE KEY-----<br/>
Proc-Type: 4,ENCRYPTED<br/>
DEK-Info: DES-EDE3-CBC,258248872DB25390<br/>

JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn
24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o
zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF
0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk
n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S
6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp
kDny2v3D8sU=
-----END EC PRIVATE KEY-----

El siguiente ejemplo muestra un archivo de clave privada que utiliza PublicKey Cryptography Standard 8 (PKCS8) en formato PEM.

-----BEGIN PRIVATE KEY-----
MIIBMAIBADCB0wYHKoZIzj0CATCBxwIBATAkBgcqhkjOPQEBAhkA////////////
/////////v//////////MEsEGP////////////////////7//////////AQYIhI9
wjlaBcqnQj2uzMlHYKfUYiVr1WkWAxUAxGloRDXes3jEtlypWR4qV2MFmi4EMQR9
KXeBAMZaHaF4NxZYjc4ri0rujiKPGJY4qQ8iY3M3M0tJ3LZqbcj5l4rKdkipQ7AC
GQD///////////////96YtAxyD9ClPZA7BMCAQEEVTBTAgEBBBiKtwssqrxHY/gu
KDD4QgmyLDKaqBv2wEWhNAMyAAT5j6o+ojeB6jaFAfx4rtGf5hYbT1N6NnlAWiP1
+bEWtTJiEVqnpeZN0m0SLybIGZY=``
-----END PRIVATE KEY-----

El siguiente ejemplo muestra un archivo de clave privada PKCS8 cifrado en formato PEM:

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIBWTAbBgkqhkiG9w0BBQMwDgQIGIcvnv17Q8oCAggABIIBOK+i1pk7em94F0Bn
+yKxU5p7e2+cnnW/8b2mjvga0Uj8JVxRHi5eR2/u+3fjHQItq0df+qzyVC0TTCPz
YZVrgHO9hPilgbGQKQQSpy9bpbGGiZ7I+aFpriEaJzugHUi8XTXY6XtnxgHAqTOX
nma2HHoGRic2wNgIGKQ+B1pULy2kFDMvQ/AwvYS13uH2Trfja9M9wRqYjM2MS0Ky
ii03OsNhJjZQcPmy2ALciR+umG4IQ7qszfrCA7L95F3qVXa7DgAPDZyUSdF3ucSh
IlrEvaP7FeLfJ1/ilUaXK6XC9EDYPDWMErUQJZJAywczQMqjY4/pdhb8Y+TpbN/r
q1I5j+JbRwfvvJV7CAHv1EEjvWiWvjHamlb7iqh3gneOYPbvSfjuaOyVd5YhwQ7P
nGOah+eEf9uyDSZabg==``
-----END ENCRYPTED PRIVATE KEY-----

Los archivos de claves privadas PKCS8 admiten diferentes tipos de claves privadas, además de las claves EC. Puede convertir los archivos para usar diferentes tipos de claves privadas y configurarlos como cifrados o sin cifrar .

Utilice el siguiente comando para convertir un archivo PKCS8 en un archivo de clave EC cifrada tradicional:

openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem

Reemplace el argumento -aes-128-cbc con cualquier otro nombre de cifrado OpenSSL válido. (Consulte la documentación de OpenSSL para obtener una lista de nombres de cifrado válidos).

Utilice el siguiente comando para convertir un archivo PKCS8 en un archivo de clave EC sin cifrar tradicional:

openssl ec -in p8file.pem -out tradfile.pem

Utilice el siguiente comando para convertir un archivo de clave EC a formato PKCS8 encriptado:

openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem

Utilice el siguiente comando para convertir un archivo de clave EC a formato PKCS8 sin cifrar:

openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem

Nota :Los archivos de claves privadas de EC no están cifrados de forma predeterminada. Debe establecer explícitamente el archivo en cifrado y especificar el algoritmo de cifrado. Los archivos PKCS8 están cifrados de forma predeterminada. Usa el -nocrypt opción para configurar el archivo como no cifrado.

Un archivo PEM son datos DER codificados mediante el uso de reglas de codificación base 64, con un encabezado y un pie de página. Los archivos PEM son legibles por humanos, por lo que son más convenientes de usar. Sin embargo, puede almacenar todos los archivos que se muestran arriba en formato DER. El formato DER es un formato binario y, a diferencia de un archivo PEM, no es legible por humanos.

La mayoría de openssl los comandos tienen opciones -inform DER y -outform DER .-inform DER especifica que el archivo de entrada es DER, y -outform DER especifica que el archivo de salida es DER.

Use el siguiente comando para convertir el formato PKCS8 a una clave EC cifrada tradicional en formato DER.

openssl ec -in p8file.pem -outform DER -out tradfile.der

No puede cifrar un archivo de clave privada EC tradicional en formato DER. Si intenta hacerlo, el comando ignora silenciosamente el argumento. Sin embargo, puede cifrar archivos PKS8 en formato DER.

Utilice el siguiente comando para convertir un archivo de clave EC tradicional a PKCS8 encriptado en formato DER:

openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der

Formatos de archivo de clave pública EC

El formato PEM admite varios tipos de claves públicas en OpenSSL. El siguiente archivo muestra las claves públicas de EC en formato PEM.

-----BEGIN PUBLIC KEY-----
MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T
ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW
-----END PUBLIC KEY-----

Utilice el siguiente comando para crear un archivo de clave pública a partir de un archivo de clave privada en formato PEM. Tenga en cuenta que no es posible crear un archivo de clave privada a partir de un archivo de clave pública.

openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem

Utilice el siguiente comando para crear un archivo de clave pública a partir de un archivo de clave privada en formato DER:

openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der

Generación de claves y parámetros EC

El archivo de parámetros EC contiene toda la información necesaria para definir una curva elíptica para operaciones criptográficas. OpenSSL utiliza algoritmos ECDH y ECDSA. Utilice el siguiente comando para obtener una lista de curvas integradas:

openssl ecparam -list_curves

Use el siguiente comando para generar un archivo de parámetros EC de la curva secp256k1 :

openssl ecparam -name secp256k1 -out secp256k1.pem

Reemplazar secp256k1 con cualquier otro nombre obtenido de openssl ecparam -list_curves comando.

Puede generar claves utilizando el ecparam comando, ya sea usando un archivo de parámetros preexistente o usando el nombre de la curva. Utilice el siguiente comando para generar un par de claves privadas/públicas a partir de un archivo de parámetros:

openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem

Utilice el siguiente comando para generar un par de claves pública/privada a partir del nombre de la curva:

openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem

El archivo de clave tiene la información de los parámetros utilizados para generar el keyembedded. OpenSSL almacena el nombre de la curva en el archivo de parámetros o en el archivo de claves. No almacena explícitamente el conjunto completo de parámetros asociados con el nombre de forma predeterminada. Utilice el siguiente comando para confirmar el nombre de la curva en el archivo de parámetros:

openssl ecparam -in secp256k1.pem -text -noout

Salida de ejemplo:

ASN1 OID: secp256k1

Use el siguiente comando para enumerar los detalles de los parámetros de un archivo de parámetros:

openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout

Utilice el siguiente comando para enumerar los detalles de los parámetros del nombre de una curva, sustituyendo el nombre de la curva según corresponda:

openssl ecparam -name secp256k1 -text -param_enc explicit -noout

Salida de ejemplo:

Field Type: prime-field
Prime:
    00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
    ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:
    ff:fc:2f
A:    0
B:    7 (0x7)
Generator (uncompressed):
    04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:
    0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:
    f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:
    0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:
    8f:fb:10:d4:b8
Order:
    00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
    ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:
    36:41:41
Cofactor:  1 (0x1)

Puede generar archivos de parámetros y archivos clave que incluyan explícitamente el conjunto completo de parámetros en lugar de solo el nombre de la curva. Esto es importante cuando algunos sistemas de destino no saben los detalles de la curva. OpenSSL versión 1.0.2 agregó nuevas curvas, como brainpool512t1 . Versiones anteriores de OpenSSL que utilizan un archivo de parámetros o un archivo de claves configurado con brainpool512t1 dando como resultado el siguiente error:

bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout
unable to load elliptic curve parameters
140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:
140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:
140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:

Use parámetros explícitos para evitar este problema, como se muestra en el siguiente comando con OpenSSL 1.0.2:

openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit

El comando produce un archivo de parámetros más largo con todos los parámetros.

-----BEGIN EC PARAMETERS-----
MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc
ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp
xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C
xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj
BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+
uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa
W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn
MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw
MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=
-----END EC PARAMETERS-----

Las versiones anteriores de OpenSSL pueden procesar el archivo de parámetros. Use el siguiente comando en OpenSSL versión 1.0.1:

openssl ecparam -in brainpoolP512t1.pem -text -noout

OpenSSL versión 1.0.1. muestra los parámetros incluso si no conoce la curva.

Utilice el siguiente comando para generar un archivo clave con parámetros explícitos:

openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit

Las versiones anteriores de OpenSSL pueden procesar el archivo de clave que obtenga.

Nota :Después de que los parámetros cambien a parámetros explícitos, no revierta los cambios. No hay ninguna utilidad para encontrar qué parámetros explícitos corresponden a una curva.

Referencias

  • Criptografía de curva elíptica
  • Curva elíptica Diffie Hellman
  • Utilidades de la línea de comandos

Use la pestaña Comentarios para hacer cualquier comentario o hacer preguntas. También puede iniciar una conversación con nosotros.


Linux
  1. Escuche la radio en la terminal Linux

  2. ¿Convertir clave privada Openssh en clave privada Ssh2?

  3. Linux:¿comprensión de las operaciones de comando de sincronización en Linux?

  4. Cómo hacer una VPN

  5. Resultados impares en operaciones base64

Cómo cambiar el nombre de los archivos usando la línea de comandos en Linux

Mascota:un simple administrador de fragmentos de línea de comandos

Cómo recargar .bash_profile en la línea de comandos de Linux

Cómo agregar una IP adicional a FreeBSD 10.1

Cómo agregar una IP privada a un servidor Ubuntu

Cómo agregar una IP privada a un servidor Debian