Problemas con Cryptokit en Ubuntu Intrepid

 

 

Hace unos dias compré el Cryptokit y estoy intentando hacerlo funcionar en un Ubuntu Intrepid. Mi idea era tener un poco de seguridad conservando los certificados en una tarjeta en lugar de un ordenador. Aún no tengo el DNIe y me da un poco de palo renovarlo por que sí, y además la tarjeta criptográfica de la FNMT parecía una buena opción.

El lector es un LTC31 USB v2 que --creo-- funciona correctamente sin más complicaciones que instalar el driver necesario. Otra cosa es la tarjeta tarjeta criptográfica de la FNMT que viene en el kit y el driver específico opensc-ceres.

Después de "googlear" bastante he podido ver que no soy el único que ha tenido problemas y que en general el soporte para esta tarjeta criptográfica de la FNMT y el DNI electrónico en Linux no es el idóneo. De todas formas creo que no estoy muy lejos de hacerla funcionar. Os dónde he llegado.Al instalar el opensc-ceres_2.0.2 (versión para gutsy, no hay otra de mas reciente...) se actualiza el /etc/opensc/opensc.conf con el driver ceres, pero luego no detecta correctamente la tarjeta. Parece que entra en la rutina ceres_match_card pero no la reconoce.

$ opensc-tool -vv --serial
[opensc-tool] sc.c:196:sc_detect_card_presence: called
[opensc-tool] sc.c:201:sc_detect_card_presence: returning with: 1
Connecting to card in reader C3PO LTC31 00 00...
[opensc-tool] card.c:110:sc_connect_card: called
[opensc-tool] reader-pcsc.c:542:pcsc_connect: After connect protocol = 1
[opensc-tool] reader-pcsc.c:561:pcsc_connect: Requesting reader features ...
[opensc-tool] reader-pcsc.c:598:pcsc_connect: Reader supports pinpad PIN verification but it's disabled in configuration file
[opensc-tool] reader-pcsc.c:608:pcsc_connect: Reader supports pinpad PIN modification but it's disabled in configuration file
[opensc-tool] c3po_card.c:107:ceres_match_card: Entering function ceres_match_card
[opensc-tool] c3po_card.c:122:ceres_match_card: Leaving function ceres_match_card: returning 0
[opensc-tool] card-piv.c:1605:piv_match_card: called
[opensc-tool] card-piv.c:510:piv_find_aid: called
[opensc-tool] iso7816.c:99:iso7816_check_sw: File not found
[opensc-tool] iso7816.c:99:iso7816_check_sw: File not found
[opensc-tool] card-piv.c:592:piv_find_aid: returning with: -1208
[opensc-tool] card.c:221:sc_connect_card: card info: Unidentified card, -1, 0x0
[opensc-tool] card.c:222:sc_connect_card: returning with: 0
Using card driver Default driver for unknown cards.
Card serial number:[opensc-tool] card.c:675:sc_card_ctl: card_ctl(5) not supported
sc_card_ctl(*, SC_CARDCTL_GET_SERIALNR, *) failed
[opensc-tool] card.c:236:sc_disconnect_card: called
[opensc-tool] card.c:251:sc_disconnect_card: returning with: 0
[opensc-tool] ctx.c:738:sc_release_context: called

$ pkcs11-tool -IO
[opensc-pkcs11] pkcs15.c:532:sc_pkcs15_bind_internal: unable to enumerate apps: Incorrect parameters in APDU
[opensc-pkcs11] pkcs15.c:761:sc_pkcs15_bind: returning with: Unsupported card
Cryptoki version 2.11
Manufacturer OpenSC (www.opensc-project.org)
Library smart card PKCS#11 API (ver 1.0)
[opensc-pkcs11] pkcs15.c:761:sc_pkcs15_bind: returning with: Unsupported card
[opensc-pkcs11] pkcs15.c:761:sc_pkcs15_bind: returning with: Unsupported card
[opensc-pkcs11] pkcs15.c:761:sc_pkcs15_bind: returning with: Unsupported card
error: PKCS11 function C_OpenSession failed: rv = CKR_TOKEN_NOT_PRESENT (0xe0)

Aborting.

En cambio, si forzamos el driver en el fichero de configuracion opensc.conf:

card_drivers = ceres;
card_driver ceres {
#The location of the driver library
module = /usr/lib/libopensc-ceres.so;
}

# Card driver configuration blocks.

# For card drivers loaded from an external shared library/DLL,
# you need to specify the path name of the module
#
# card_driver customcos {
# The location of the driver library
# module = /usr/lib/opensc/drivers/card_customcos.so;
# }

card_drivers = internal;
# Force using specific card driver
#
# If this option is present, OpenSC will use the supplied
# driver with all inserted cards.
#
# Default: autodetect
#
force_card_driver = ceres;

Luego, despues de reiniciar, parece que si que lee la tarjeta aunque da un error:

$ opensc-tool -vv --serial
[opensc-tool] sc.c:196:sc_detect_card_presence: called
[opensc-tool] sc.c:201:sc_detect_card_presence: returning with: 1
Connecting to card in reader C3PO LTC31 00 00...
[opensc-tool] card.c:110:sc_connect_card: called
[opensc-tool] reader-pcsc.c:542:pcsc_connect: After connect protocol = 1
[opensc-tool] reader-pcsc.c:561:pcsc_connect: Requesting reader features ...
[opensc-tool] reader-pcsc.c:598:pcsc_connect: Reader supports pinpad PIN verification but it's disabled in configuration file
[opensc-tool] reader-pcsc.c:608:pcsc_connect: Reader supports pinpad PIN modification but it's disabled in configuration file
[opensc-tool] c3po_card.c:137:ceres_init: Entering function ceres_init
[opensc-tool] c3po_card.c:362:ceres_set_virtual_fs_state: virtual_fs mode activated
[opensc-tool] c3po_card.c:220:ceres_init: no correct id parsed!! Id:-660492288
[opensc-tool] c3po_card.c:299:ceres_init: returning with: 0
[opensc-tool] card.c:221:sc_connect_card: card info: FNMT Ceres card, -1, 0x0
[opensc-tool] card.c:222:sc_connect_card: returning with: 0
Using card driver FNMT Ceres card.
Card serial number:[opensc-tool] c3po_card.c:1337:ceres_ctl: Entering function ceres_ctl
[opensc-tool] c3po_card.c:1341:ceres_ctl: Calling function ceres_get_serialnr
[opensc-tool] c3po_card.c:1856:ceres_get_serialnr: Entering function ceres_get_serialnr
[opensc-tool] card.c:675:sc_card_ctl: card_ctl(5) not supported
sc_card_ctl(*, SC_CARDCTL_GET_SERIALNR, *) failed
[opensc-tool] card.c:236:sc_disconnect_card: called
[opensc-tool] c3po_card.c:304:c3po_finish: Entering function c3po_finish
[opensc-tool] c3po_card.c:344:c3po_finish: Leaving function c3po_finish
[opensc-tool] card.c:251:sc_disconnect_card: returning with: 0
[opensc-tool] ctx.c:738:sc_release_context: called

$ pkcs11-tool -IO --pin zzzzzz
[opensc-pkcs11] c3po_card.c:220:ceres_init: no correct id parsed!! Id:192024576
Cryptoki version 2.11
Manufacturer OpenSC (www.opensc-project.org)
Library smart card PKCS#11 API (ver 1.0)
[opensc-pkcs11] sec.c:201:sc_pin_cmd: returning with: PIN code or key incorrect
error: PKCS11 function C_Login failed: rv = CKR_PIN_INCORRECT (0xa0)

Aborting.

$ pkcs11-tool -IO --pin
[opensc-pkcs11] c3po_card.c:220:ceres_init: no correct id parsed!! Id:1482182656
Cryptoki version 2.11
Manufacturer OpenSC (www.opensc-project.org)
Library smart card PKCS#11 API (ver 1.0)

Aparte del error "no correct id parsed" parece que es capaz de leer la tarjeta y detecta bien el pin. Además, después de forzar el driver me ha dejado cargar el módulo /usr/lib/opensc/opensc-pkcs11.so en el Firefox, y antes no me dejaba. ¿Tenéis idea de porque sale el error y más importante aún, porqué no detecta automáticamente la tarjeta?

Hice todos los pasos para conseguir el certificado digital de la FNMT a través del apartado "Tarjeta Criptografica", pero como esta no funcionaba, en lugar de dar error se me instaló en el Firefox directamente.

Respecto a los certificados que expide la FNMT, tengo un par de preguntas:
¿El certificado es el mismo con o sin tarjeta criptográfica CERES?
¿El certificado del DNIe es del mismo tipo también?
¿El certificado que ya tengo se podrá instalar en la tarjeta o deberé pedir otro certificado? Veo que hay una limitación de 1024 bits en la tarjeta pero no tengo claro a que se refiere. En las propiedades del certificado veo lo siguiente:
Clave pública personal: módulo 2048 bits
Valor de la firma del certificado: Tamaño: 128 bits / 1024 bits
Quizás se puede exportar el certificado y con pkcs11-tool se puede transferir a la tarjeta...

Bueno esto es todo. A ver si podéis ayudarme

Y gracias a todos por adelantado!
Jordi.

Comentarios

Selecciona arriba tu forma preferida de visualizar los comentarios y pulsa el botón para guardar tu elección para próximas visitas (sólo si eres usuario registrado).
akas84's picture

Respuesta a tus preguntas


En cuanto al problema con el ATR, la fabrica nacional de moneda y timbre ha cambiado el ATR de sus tarjetas, concretamente el 5 byte comenzando por el final, y por eso no hace el matching. En las nuevas librerías ya se detectará correctamente. Lo que comentas del no correct id parsed parece un error que no está causando ningún problema en el acceso a tarjeta.

Y ahora las preguntas:

¿El certificado es el mismo con o sin tarjeta criptográfica CERES?

Sí, pero con tarjeta las claves se generan dentro de la tarjeta de forma que es imposible acceder a la clave privada, en cambio sin tarjeta se generan en software en el navegador.

¿El certificado del DNIe es del mismo tipo también?

Si te refieres a si es de tipo x.509 la respuesta es sí. Si te refieres a otra cuestión deberías especificar.

¿El certificado que ya tengo se podrá instalar en la tarjeta o deberé pedir otro certificado? Veo que hay una limitación de 1024 bits en la tarjeta pero no tengo claro a que se refiere. En las propiedades del certificado veo lo siguiente:
Clave pública personal: módulo 2048 bits
Valor de la firma del certificado: Tamaño: 128 bits / 1024 bits
Quizás se puede exportar el certificado y con pkcs11-tool se puede transferir a la tarjeta...

Las actuales librerías de opensc-ceres solo soportan claves de 1024 bits lo que significa que este certificado no lo podrás importar a la tarjeta, al menos con estas librerías. Las nuevas librerías ya tendrán soporte para 2048.

--
Soporte técnico de C3PO

neulos's picture

Gracias por tu respuesta!


Gracias por tu respuesta!

Por lo que dices el problema ha sido que al generar el certificado sin tener la tarjeta bien configurada (me di cuenta mas tarde) éste se generó en el Firefox en lugar de la tarjeta. Puede ser que lo pueda transferir a la tarjeta, pero no con las librerias actuales ya que la clave pública es de 2048 bits, correcto?

Por cierto, en tu mensaje te refieres a las nuevas librerías. De entrada esto es una buena noticia. ¿Alguna idea aproximada de cuando estaran disponibles y para que sistemas / distribuciones?

akas84's picture

Respuesta CryptoKit


en cuanto a tu pregunta:

Por lo que dices el problema ha sido que al generar el certificado sin tener la tarjeta bien configurada (me di cuenta mas tarde) éste se generó en el Firefox en lugar de la tarjeta. Puede ser que lo pueda transferir a la tarjeta, pero no con las librerias actuales ya que la clave pública es de 2048 bits, correcto?

Es correcto. Las librerías no soportan 2048bits y por tanto no te dejaria importarlo, ni leerlo aunque lo exportaras des de windows. Recuerda que para que puedas importarlo en la tarjeta, al ser de 2048bits, la tarjeta deberá ser del modelo ST, ya que los modelos antiguos (INFINEON) no soportaban 2048.

Las nuevas librerías estarán en fase de testeo durante Mayo y saldrán cuando las pruebas hayan finalizado. En cuanto a los sistemas, en principio serán Ubuntu Hardy, Ubuntu Intrepid, Debian Lenny, Fedora 9 y Fedora 10.

Saludos

neulos's picture

Ok. Gracias


Ok. Gracias por tu respuesta.

Miraré de estar atento cuando salgan las nuevas librerías y ya postearé mis resultados. Si necesitáis un probador aquí me tenéis ...

¿Cómo se puede saber que tipo de tarjeta he comprado?

Jordi.

neulos's picture

en Windows funciona


Hola a todos,

Finalmente y después que un compañero me dijera que el Cryptokit le funcionaba en un Vista a la primera me he decidido a instalar el software del Cryptokit en la partición de Windows vista. Todo ha funcionado correctamente a la primera y con el software del kit he podido transferir a la tarjeta el certificado digital que tenia en el Firefox de Linux prèvia exportación de éste.

Cuando salgan las nuevas librerías para Linux lo podremos probar en Ubuntu.

Saludos,
Jordi.