Firma RSA PKCS #11 con OpenSC y Gemalto eToken 5110

Aprenda a usar un eToken Safenet de Gemalto para firmar hashes SHA256 con el sello electrónico certificado eIDAS. Siga los pasos para crear y verificar las firmas y explorar los mecanismos de firma compatibles.

17 Dec
,
2020
24 Jun
,
2025
# min read
USB eToken para autenticación digital segura y verificación de identidad

Tengo un eToken SafeNet de Gemalto con un Sello electrónico certificado eIDAS (también conocido como sello electrónico, sello digital o certificado de firma de documentos) emitido por Soluciones SK ID. Quiero firmar un hash SHA-256 con este token.

Paso 1: Compruebe la información del par de claves

Necesitamos la etiqueta del token (o el identificador de la ranura) 8, que es 0x11) y el identificador de clave pública (00000000) para firmar y verificar.

$ pkcs11-tool --module /usr/lib/libIDPrimePKCS11.so -L

Salida de muestra:

Slot 8 (0x11): SafeNet eToken 5100 [eToken 5110 SC] 01  (Digital Signature Pin)
  token label        : eID Easy (Digital Signature Pin)
  token manufacturer : Gemalto
  token model        : ID Prime MD
  token flags        : login required, rng, token initialized, PIN initialized, other flags=0x200
  hardware version   : 0.0
  firmware version   : 0.0
  serial num         : 06E2CF0B29CA6BD0
  pin min/max        : 4/16

Obtenga los detalles de la clave pública y el certificado:

$ pkcs11-tool --module /usr/lib/libIDPrimePKCS11.so --token-label "eID Easy (Digital Signature Pin)" -O

Salida de muestra:

Certificate Object; type = X.509 cert
  label:
  subject: DN: organizationIdentifier=NTREE-14080014/serialNumber=14080014, ST=Harjumaa, L=Tallinn, C=EE, O=EID Easy OÜ, CN=eID Easy
  ID: 00000000

Public Key Object; RSA 2048 bits
  label: eID Easy
  ID: 00000000
  Usage: verify, wrap
  Access: local

Paso 2: Preparar el resumen

Suponiendo que ya tiene un hash SHA-256 en formato hexadecimal:

$ echo "19d512fc649e1668eb84741284ad95ec03f3225719a83e40389dbade4eabe5ed" > digest.txt
$ xxd -r -p digest.txt digest.bin

Paso 3: Firma el resumen

Utilice herramienta pkcs11 con RSA-PKCS, que firma una entrada binaria sin procesar (no un cálculo resumido en sí mismo).

$ pkcs11-tool --module /usr/lib/libIDPrimePKCS11.so --pin=$PIN --token-label "eID Easy (Digital Signature Pin)" -s -i digest.bin -m RSA-PKCS > signature.bin

Ver firma en base64:

$ base64 signature.bin -w0

Ejemplo de salida (su firma real será diferente):

RseZYWjkyNRcU1lI1KR+I+0C1jC+FVp2kTAhyOUsE2x6UGf+UMSf3kqD4KGBb+eI...

Paso 4: Verificar la firma

Extraiga la clave pública:

$ pkcs11-tool --module /usr/lib/libIDPrimePKCS11.so --token-label "eID Easy (Digital Signature Pin)" --read-object --type pubkey --id=00000000 > public-key.der
$ openssl rsa -inform DER -outform PEM -in public-key.der -pubin > public-key.pem

Verifique la firma y extraiga el resumen original:

$ openssl rsautl -verify -inkey public-key.pem -in signature.bin -pubin > verified.bin$ xxd -p -c32 verified.bin > verified.txt

Compare los resúmenes:

$ cat digest.txt verified.txt

Salida esperada:

19d512fc649e1668eb84741284ad95ec03f3225719a83e40389dbade4eabe5ed19d512fc649e1668eb84741284ad95ec03f3225719a83e40389dbade4eabe5ed

Notas sobre los mecanismos de firma compatibles

El token admite una variedad de mecanismos que incluyen RSA sin procesar y variantes con hash con/sin relleno de PSS:

$ pkcs11-tool --module /usr/lib/libIDPrimePKCS11.so -M --slot 0x11 | grep sign

Salida de muestra:

RSA-PKCS
RSA-PKCS-PSS
SHA256-RSA-PKCS
SHA256-RSA-PKCS-PSS
SHA384-RSA-PKCS
SHA384-RSA-PKCS-PSS
SHA512-RSA-PKCS
SHA512-RSA-PKCS-PSS
...

  • RSA-PKCS: Firma la entrada binaria sin procesar, sin hash.
  • SHA256-RSA-PKCS: Hashes con SHA-256 antes de firmar.
  • SHA256-RSA-PKCS-PSS: Halla y utiliza un relleno PSS aleatorio (firma no determinista).


More latest articles

See all news
See all news