Gestión de cifrado y certificados en Oracle® Solaris 11.2

Salir de la Vista de impresión

Actualización: Septiembre de 2014
 
 

Cómo generar una clave simétrica con el comando pktool

Algunas aplicaciones requieren una clave simétrica para el cifrado y el descifrado de las comunicaciones. En este procedimiento, se crea una clave simétrica y se la almacena.

Si su sitio cuenta con un generador de números aleatorios, puede utilizar el generador para crear un número aleatorio para la clave. Este procedimiento no utiliza el generador de números aleatorios de su sitio.

  1. (Opcional) Si tiene previsto utilizar un almacén de claves, créelo.
  2. Genere un número aleatorio para usarlo como clave simétrica.

    Utilice uno de los métodos siguientes.

    • Genere una clave y almacénela en un archivo.

      La ventaja de almacenar una clave en un archivo es que se puede extraer la clave de este archivo para usarla en el archivo de claves de una aplicación, como el archivo /etc/inet/secret/ipseckeys o IPsec. La instrucción de uso muestra los argumentos.

      % pktool genkey keystore=file
      ...genkey keystore=file
      outkey=key-fn
      [ keytype=aes|arcfour|des|3des|generic ]
      [ keylen=key-size (AES, ARCFOUR or GENERIC only)]
      [ print=y|n ]
      outkey=key-fn

      El nombre de archivo donde se almacena la clave.

      keytype=specific-symmetric-algorithm

      Para una clave simétrica de cualquier longitud, el valor es generic. Para un algoritmo determinado, especifique aes, arcfour, des o 3des.

      Para los algoritmos aprobados por FIPS 140, seleccione un tipo de clave validado para FIPS. Consulte FIPS 140 Algorithms in the Cryptographic Framework de Using a FIPS 140 Enabled System in Oracle Solaris 11.2 .

      keylen=size-in-bits

      La longitud de la clave en bits. El número debe ser divisible por 8. No especifique para des ni 3des.

      Para los algoritmos aprobados por FIPS 140, seleccione una longitud de clave validada para FIPS. Consulte FIPS 140 Algorithms in the Cryptographic Framework de Using a FIPS 140 Enabled System in Oracle Solaris 11.2 .

      print=n

      Imprime la clave en la ventana de terminal. De manera predeterminada, el valor de print es n.

    • Genere una clave y almacénela en un almacén de claves PKCS #11.

      La ventaja del almacén de claves PKCS #11 es que se puede recuperar la clave por su etiqueta. Este método es útil para las claves para cifrar y descifrar archivos. Debe completar el Step 1 antes de utilizar este método. La instrucción de uso muestra los argumentos. Los corchetes alrededor del argumento del almacén de claves indican que cuando el argumento de almacén de claves no estás especificado, la clave se almacena en el almacén de claves PKCS #11.

      $ pktool genkey keystore=pkcs11
      ...genkey [ keystore=pkcs11 ]
      label=key-label
      [ keytype=aes|arcfour|des|3des|generic ]
      [ keylen=key-size (AES, ARCFOUR or GENERIC only)]
      [ token=token[:manuf[:serial]]]
      [ sensitive=y|n ]
      [ extractable=y|n ]
      [ print=y|n ]
      label=key-label

      Una etiqueta especificada por el usuario para la clave. La clave se puede recuperar del almacén de claves por su etiqueta.

      keytype=specific-symmetric-algorithm

      Para una clave simétrica de cualquier longitud, el valor es generic. Para un algoritmo determinado, especifique aes, arcfour, des o 3des.

      Para los algoritmos aprobados por FIPS 140, seleccione un tipo de clave validado para FIPS. Consulte FIPS 140 Algorithms in the Cryptographic Framework de Using a FIPS 140 Enabled System in Oracle Solaris 11.2 .

      keylen=size-in-bits

      La longitud de la clave en bits. El número debe ser divisible por 8. No especifique para des ni 3des.

      Para los algoritmos aprobados por FIPS 140, seleccione una longitud de clave validada para FIPS. Consulte FIPS 140 Algorithms in the Cryptographic Framework de Using a FIPS 140 Enabled System in Oracle Solaris 11.2 .

      token=token

      El nombre del token. De manera predeterminada, el token es Sun Software PKCS#11 softtoken.

      sensitive=n

      Especifica la sensibilidad de la clave. Cuando el valor es y, la clave no se puede imprimir utilizando el argumento print=y. De manera predeterminada, el valor de sensitive es n.

      extractable=y

      Especifica que la clave se puede extraer del almacén de claves. Especifique n para evitar que se extraiga la clave.

      print=n

      Imprime la clave en la ventana de terminal. De manera predeterminada, el valor de print es n.

    • Genere una clave y almacénela en un almacén de claves NSS.

      Debe completar el Step 1 antes de utilizar este método. La instrucción de uso muestra los argumentos.

      $ pktool genkey keystore=nss
      ...genkey keystore=nss
      label=key-label
      [ keytype=aes|arcfour|des|3des|generic ]
      [ keylen=key-size (AES, ARCFOUR or GENERIC only)]
      [ token=token[:manuf[:serial]]]
      [ dir=directory-path ]
      [ prefix=DBprefix ]
      label=key-label

      Una etiqueta especificada por el usuario para la clave. La clave se puede recuperar del almacén de claves por su etiqueta.

      keytype=specific-symmetric-algorithm

      Para una clave simétrica de cualquier longitud, el valor es generic. Para un algoritmo determinado, especifique aes, arcfour, des o 3des.

      Para los algoritmos aprobados por FIPS 140, seleccione un tipo de clave validado para FIPS. Consulte FIPS 140 Algorithms in the Cryptographic Framework de Using a FIPS 140 Enabled System in Oracle Solaris 11.2 .

      keylen=size-in-bits

      La longitud de la clave en bits. El número debe ser divisible por 8. No especifique para des ni 3des.

      Para los algoritmos aprobados por FIPS 140, seleccione una longitud de clave validada para FIPS. Consulte FIPS 140 Algorithms in the Cryptographic Framework de Using a FIPS 140 Enabled System in Oracle Solaris 11.2 .

      token=token

      El nombre del token. De manera predeterminada, el token es el token interno NSS.

      dir=directorio

      La ruta de directorio a la base de datos NSS. De manera predeterminada, el valor de directorio es el directorio actual.

      prefix=directory

      El prefijo a la base de datos NSS. El valor predeterminado es sin prefijo.

  3. (Opcional) Compruebe que la clave exista.

    Utilice uno de los siguientes comandos, según dónde haya guardado la clave.

    • Verifique la clave en el archivo key-fn.
      % pktool list keystore=file objtype=key [infile=key-fn]
      Found n keys.
      Key #1 - keytype:location (keylen)
    • Verifique la clave en el almacén de claves PKCS #11 o NSS.
      For PKCS #11, use the following command:
      $ pktool list keystore=pkcs11 objtype=key
      Enter PIN for keystore:
      Found n keys.
      Key #1 - keytype:location (keylen)

      Como alternativa, reemplace keystore=pkcs11 con keystore=nss en el comando.

Ejemplo 3-1  Creación de una clave simétrica con el comando pktool

En el siguiente ejemplo, un usuario crea un almacén de claves PKCS #11 por primera vez y, a continuación, genera una clave simétrica de gran tamaño para una aplicación. Por último, el usuario verifica que la clave se encuentre en el almacén de claves.

Tenga en cuenta que la contraseña inicial para un almacén de claves PKCS #11 es changeme. La contraseña inicial para un almacén de claves NSS es una contraseña vacía.

# pktool setpin
Create new passphrase:Type password
Re-enter new passphrase:Retype password
Passphrase changed.
% pktool genkey label=specialappkey keytype=generic keylen=1024
Enter PIN for Sun Software PKCS#11 softtoken  :Type password

% pktool list objtype=key
Enter PIN for Sun Software PKCS#11 softtoken  :Type password
No.      Key Type      Key Len.      Key Label
----------------------------------------------------
Symmetric keys:
1        Symmetric     1024          specialappkey
Ejemplo 3-2  Creación de una clave AES aprobada por FIPS con el comando pktool

En el siguiente ejemplo, se crea una clave secreta para el algoritmo AES mediante un algoritmo y una longitud de clave aprobados por FIPS. La clave se almacena en un archivo local para un posterior descifrado. El comando protege el archivo con 400 permisos. Cuando se crea la clave, la opción print=y muestra la clave generada en la ventana de terminal.

El usuario que posee el archivo de claves recupera la clave mediante el comando od.

% pktool genkey keystore=file outkey=256bit.file1 keytype=aes keylen=256 print=y
Key Value ="aaa2df1d10f02eaee2595d48964847757a6a49cf86c4339cd5205c24ac8c8873"
% od -x 256bit.file1

0000000 aaa2 df1d 10f0 2eae e259 5d48 9648 4775
0000020 7a6a 49cf 86c4 339c d520 5c24 ac8c 8873
0000040
Ejemplo 3-3  Creación de una clave simétrica para las asociaciones de seguridad IPsec

En el siguiente ejemplo, el administrador crea manualmente el material clave para las asociaciones de seguridad de IPsec y las almacena en archivos. A continuación, el administrador copia las claves al archivo /etc/inet/secret/ipseckeys y destruye los archivos originales.

En primer lugar, el administrador crea y muestra las claves que la política IPsec requiere:

# pktool genkey keystore=file outkey=ipencrin1 keytype=generic keylen=192 print=y
Key Value ="294979e512cb8e79370dabecadc3fcbb849e78d2d6bd2049"
# pktool genkey keystore=file outkey=ipencrout1 keytype=generic keylen=192 print=y
Key Value ="9678f80e33406c86e3d1686e50406bd0434819c20d09d204"
# pktool genkey keystore=file outkey=ipspi1 keytype=generic keylen=32 print=y
Key Value ="acbeaa20"
# pktool genkey keystore=file outkey=ipspi2 keytype=generic keylen=32 print=y
Key Value ="19174215"
# pktool genkey keystore=file outkey=ipsha21 keytype=generic keylen=256 print=y
Key Value ="659c20f2d6c3f9570bcee93e96d95e2263aca4eeb3369f72c5c786af4177fe9e"
# pktool genkey keystore=file outkey=ipsha22 keytype=generic keylen=256 print=y
Key Value ="b041975a0e1fce0503665c3966684d731fa3dbb12fcf87b0a837b2da5d82c810"

A continuación, el administrador crea el siguiente archivo /etc/inet/secret/ipseckeys:

##   SPI values require a leading 0x.
##   Backslashes indicate command continuation.
##
## for outbound packets on this system
add esp spi 0xacbeaa20 \
src 192.168.1.1 dst 192.168.2.1 \
encr_alg aes auth_alg sha256  \
encrkey  294979e512cb8e79370dabecadc3fcbb849e78d2d6bd2049 \
authkey  659c20f2d6c3f9570bcee93e96d95e2263aca4eeb3369f72c5c786af4177fe9e
##
## for inbound packets
add esp spi 0x19174215 \
src 192.168.2.1 dst 192.168.1.1 \
encr_alg aes auth_alg sha256  \
encrkey 9678f80e33406c86e3d1686e50406bd0434819c20d09d204 \
authkey b041975a0e1fce0503665c3966684d731fa3dbb12fcf87b0a837b2da5d82c810

Después de verificar que la sintaxis del archivo ipseckeys sea válida, el administrador destruye los archivos de claves originales.

# ipseckey -c /etc/inet/secret/ipseckeys
# rm ipencrin1 ipencrout1 ipspi1 ipspi2 ipsha21 ipsha22

El administrador copia el archivo ipseckeys al sistema de comunicación mediante el comando ssh u otro mecanismo seguro. En el sistema de comunicación, las protecciones se revierten. La primera entrada en el archivo ipseckeys protege los paquetes entrantes y la segunda entrada protege los paquetes salientes. No se generan claves en el sistema de comunicación.

Pasos siguientes

Para continuar con el uso de la clave para crear un código de autenticación de mensajes (MAC) para un archivo, consulte Cómo calcular un MAC de un archivo.