Claves y firmas ECDSA
EJBCA admite claves de firma ECDSA además de RSA. Puede crear una CA con claves ECDSA tanto desde la interfaz gráfica de usuario (GUI) de administración como desde la CLI (bin/ejbca.sh ca init).
Esta sección proporciona información sobre las claves y firmas ECDSA en las siguientes secciones:
Claves y certificados generados
Al generar una CA en EJBCA, se generan hasta tres claves y certificados:
Un par de claves y un certificado de firma de CA
Un par de claves de cifrado, utilizado para cifrar la información de recuperación de claves
Un par de claves de firmante OCSP y un certificado
Al usar claves ECDSA, el par de claves de firma de la CA y el par de claves de firmante de OCSP serán del tipo de clave ECDSA que seleccione al crear la CA. El certificado de firma de la CA y el de OCSP se firmarán con el algoritmo de firma seleccionado. El par de claves de cifrado siempre será RSA, con una longitud de clave de 1024 o 2048 bits. Utiliza la longitud de clave establecida en la interfaz gráfica de usuario (GUI) o, por defecto, 2048 bits mediante la CLI.
Uso de ECDSA con un HSM
Tenga en cuenta que la clave keyEncryptKey no puede ser ECDSA, sino una clave RSA. Su HSM debe ser compatible con claves ECDSA y RSA. Puede usar PKCS11HSMKeyTool de clientToolBox para generar claves y solicitudes de certificado desde un HSM. Para obtener más información, consulte la sección sobre parámetros de propiedades de HSM.
Uso de curvas Brainpool con nombre en Java PKCS#11
Hasta hace poco, OracleJDK/OpenJDK no disponía de definiciones de curvas con nombre para las curvas de Brainpool. Esta funcionalidad está disponible en versiones posteriores de Java, como las versiones finales de Java 8 y Java 11. Para versiones anteriores, los usuarios de Enterprise pueden obtener un parche compilado junto con un script de instalación para sistemas operativos basados en Debian desde PrimeKey .
Brainpool debería funcionar en todos los HSM compatibles con curvas con nombre . Se ha probado en Thales TCT Luna SA y Utimaco CryptoServer. Thales ProtectServer es compatible con Brainpool, pero no utiliza curvas con nombre. Consulte a continuación la compatibilidad con Brainpool en ProtectServer mediante parámetros de dominio personalizados.
Puede crear y usar CA con curvas de Brainpool en el HSM. Ejemplos de comandos de clientToolBox para generar una clave:
./ejbcaClientToolBox.sh PKCS11HSMKeyTool generate /usr/lunasa/lib/libCryptoki2_64.so brainpoolP160r1 keyAliasBp160 1./ejbcaClientToolBox.sh PKCS11HSMKeyTool test /usr/lunasa/lib/libCryptoki2_64.so 1./ejbcaClientToolBox.sh PKCS11HSMKeyTool generate /etc/utimaco/libcs2_pkcs11.so brainpoolP160r1 keyAliasBp160 1./ejbcaClientToolBox.sh PKCS11HSMKeyTool test /etc/utimaco/libcs2_pkcs11.so 1 Uso de SHA224WithECDSA en Java PKCS#11
Hasta hace poco, OracleJDK/OpenJDK no era compatible con SHA224WithECDSA en el proveedor PKCS#11. Esta funcionalidad está disponible en versiones posteriores de Java, como las versiones finales de Java 8 y Java 11. Para versiones anteriores, los usuarios de Enterprise pueden obtener un parche compilado junto con un script de instalación para sistemas operativos basados en Debian desde PrimeKey .
Debería funcionar en todos los HSM que tengan soporte para SHA224WithECDSA.
Problema con parámetros explícitos en Java
Para utilizar curvas elípticas con parámetros explícitos (a diferencia de las curvas con nombre estándar), debe aplicar un parche al archivo ECParameters.java.
Descargue el código fuente del JDK y localice el archivo sun/security/ec/ECParameters.java.
A partir de la línea 210, hay código para gestionar parámetros EC de curva sin nombre. Elimine la excepción lanzada en la línea 208 y habilite el código comentado.
Compila la clase ejecutando 'javac *.java' en el directorio donde se encuentra el archivo.
Reemplace el archivo sun/security/ec/ECParameters.class existente en jre/lib/rt.jar con su versión parcheada y compilada.
Uso de Brainpool ECC con Thales ProtectServer Gold HSM
Las siguientes instrucciones fueron aportadas por DGBK, Países Bajos, y son válidas para el uso de curvas Brainpool con el HSM Thales ProtectServer Gold. Tenga en cuenta que ProtectServer requiere parámetros explícitos para las curvas Brainpool. Además, al usar parámetros explícitos (y el proveedor Sun PKCS#11), no se pueden usar las herramientas EJBCA para generar claves, sino que se deben usar las herramientas de los proveedores del HSM.
Antes de generar parámetros y claves de dominio, primero aplique el parche para parámetros explícitos, como se describe arriba.
Tenga en cuenta que los siguientes comandos se aplican a la versión de software 3.33 y versión de firmware 2.07 de ProtectServer Gold .
Cree el archivo de parámetros de dominio brainpoolP160r1.txt desde ptk_c_administration_manual_rev-c.pdf, Apéndice G, Ejemplos de archivos de parámetros de dominio de EC. Tenga en cuenta que debe agregar "cofactor=01" al final del archivo de parámetros; el cofactor siempre es uno (en el documento de especificaciones) para las curvas de Brainpool (cofactor=1 no funciona, debe ser 01).
Configure el HSM para aceptar parámetros de dominio personalizados (bandera E):
./ctconf -fcEImportar los parámetros del dominio al HSM:
/ctkmu idp -s 1 -t ec -n brainpoolP160r1 brainpoolP160r1.txtGenerar claves y un certificado ficticio. El certificado ficticio es necesario para el proveedor PKCS#11 de Java; el DN no importa.
./ctcert c -k -l bpkey -tec -s1 -CbrainpoolP160r1 -d30yPruebe las teclas con:
./ejbcaClientToolBox.sh PKCS11HSMKeyTool test /opt/PTK/lib/libcryptoki.so 1Inicie EJBCA y cree una nueva CA con propiedades CAToken:
sharedLibrary=/opt/PTK/lib/libcryptoki.sodefaultKey=bpkeyslotLabelType=SLOT_NUMBERslotLabelValue=1
Curvas con nombre ECC frente a parámetros explícitos
Normalmente, se generan solicitudes y certificados utilizando curvas con nombre codificadas en certificados y solicitudes; esto es lo que recomienda el IETF. En algunos casos, es necesario generar la solicitud y el certificado con parámetros explícitos; por ejemplo, la OACI exige su uso en CSCA y DS para pasaportes electrónicos.
Al generar solicitudes con clientToolBox PKCS11HSMKeyTool certreq, puede especificar un indicador para usar parámetros explícitos en lugar de curvas con nombre. Las curvas con nombre son la opción predeterminada.
Al crear CA con ejbca.sh ca init, puede especificar un indicador para usar parámetros explícitos en lugar de curvas con nombre. Las curvas con nombre son la opción predeterminada.
Cuando EJBCA emite un certificado con claves públicas a partir de solicitudes de certificado (CSR), la clave del certificado será la misma que la de la CSR. Si la CSR utiliza parámetros explícitos, también los utilizará el certificado emitido.
Si genera una CA con parámetros ECC explícitos en el certificado de CA, no podrá ejecutar comandos como 'ejbca.sh ca listcas', ya que Java solo admite curvas con nombre al serializar certificados. Puede solucionar esto añadiendo el proveedor de BC como primer proveedor:
$ sudo vi /etc/java-7-openjdk/security/java.securitysecurity.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider(renumber the ones below)Después de editar esto (asegúrese de editar el archivo correcto) debe reiniciar JBoss.
Curvas con nombre
EJBCA admite las curvas compatibles con BouncyCastle, incluyendo curvas con nombre de NIST, SEC y X9.62. Es posible que se admitan nuevas curvas sin actualizar esta lista; pruébelo. Para más información sobre las curvas ECDSA, consulte la wiki de Bouncycastle .
Tenga en cuenta que EJBCA no admite claves EC de menos de 224 bits. Las curvas más cortas se indican a continuación solo como referencia.
Curvas X9.62 | Curvas SEC | Curvas Nist | Curvas de teleconfianza |
prime192v1 prime192v2 prime192v3 prime239v1 prime239v2 prime239v3 prime256v1 | sect571r1 sect409r1 sect283r1 sect233r1 sect163r2 secp521r1 secp256r1 secp224r1 secp384r1 | P-224 P-256 P-384 P-521 B-163 B-233 B-283 B-409 B-571 | Brainpoolp160r1 Brainpoolp160t1 Brainpoolp192r1 Brainpoolp192t1 brainpoolp224r1 Brainpoolp224t1 brainpoolp256r1 brainpoolp256t1 Brainpool P320R1 Brainpoolp320t1 Brainpoolp384r1 grupo de cerebros p384t1 Brainpoolp512r1 Brainpoolp512t1 |
Curvas CA implícitas
X9.62 ofrece tres alternativas para los parámetros que se pueden encontrar en una clave pública EC. Una de ellas se denomina implicitlyCA e indica que los parámetros se definen en otro lugar, implícitamente en el nombre de la autoridad de certificación (CA) que emitió la clave. En este caso, los parámetros reales aparecen en la codificación ASN.1 de la clave como un valor NULL codificado en DER. Como indica la definición, al usar la clave, los parámetros deberán provenir de otro lugar. En EJBCA, los parámetros se configuran en conf/cesecore.properties .
Al crear una nueva CA utilizando la función implicitlyCA, primero configure los parámetros de curva en conf/cesecore.properties y emita los comandos:
limpieza de hormigas
despliegue de hormigas
Tras reiniciar el servidor de aplicaciones, puede crear una nueva CA con el nombre implicitlyCA en lugar de un nombre de curva como keyspec en la interfaz gráfica de usuario o la CLI de administración. El certificado de la CA se creará con la codificación NULL de la clave pública.
Al emitir certificados de cliente donde la clave pública del cliente usa implicitlyCA, debe permitir una longitud de clave 0 en el perfil del certificado, porque EJBCA no puede leer la longitud de clave, ya que los parámetros se definen en otro lugar.
Consulte la wiki de Bouncycastle para obtener más información sobre la función implicitlyCA.
Los parámetros de curva en conf/cesecore.parameters se configuran en Bouncycastle usando el siguiente código:
ECCurve curve = new ECCurve.Fp(new BigInteger(ecdsa.implicitlyca.q), // qnew BigInteger(ecdsa.implicitlyca.a, 16), // anew BigInteger(ecdsa.implicitlyca.b, 16)); // borg.bouncycastle.jce.spec.ECParameterSpec implicitSpec = new org.bouncycastle.jce.spec.ECParameterSpec(curve,curve.decodePoint(Hex.decode(ecdsa.implicitlyca.g)), // Gnew BigInteger(ecdsa.implicitlyca.n)); // nConfigurableProvider config = (ConfigurableProvider)Security.getProvider(BouncyCastleProvider.PROVIDER_NAME);config.setParameter(ConfigurableProvider.EC_IMPLICITLY_CA, implicitSpec); Creación de certificados de cliente
También puede emitir solicitudes normales de certificados de cliente utilizando claves ECDSA.
Todos los certificados firmados por una CA ECDSA utilizarán naturalmente firmas ECDSA, independientemente de si las claves del cliente son RSA o ECDSA.
Al generar claves de cliente por lotes mediante el comando de la CLI "bin/ejbca.sh batch", se configura el tipo de claves de cliente que se generarán en el archivo conf/batchtool.properties . Los parámetros posibles se explican allí. Si se utiliza la función implicitlyCA, se utilizan los mismos parámetros configurados para la CA en conf/cesecore.properties .
Limitaciones
Al usar el modo implicitlyCA, solo se puede establecer un conjunto de parámetros de curva para toda la instancia EJBCA. Esto significa que si varias CA usan ECDSA con implicitlyCA , todas usarán los mismos parámetros de curva. Puede combinar implicitlyCA con curvas con nombre según sus preferencias.