Вы находитесь на странице: 1из 80

Firmando digitalmente con tu DNIe

Ricardo Borillo
borillo@uji.es

Yo

jXAdES

@firma

ndice

Firma digital Estndares en criptografa Firma digital en Java Formatos de firma DNIe: Caractersticas y estndares Firma digital con DNIe Herramientas y libreras disponibles

Firma digital

Criptografa

simtrica vs asimtrica

<<<<

Certificate: Data: Version: 3 (0x2) Serial Number: 10:8f:d9:83:3a:fe:b0:e9 Signature Algorithm: sha1WithRSAEncryption Issuer: CN=ACCV-CA2, OU=PKIGVA, O=Generalitat Valenciana, C=ES Validity Not Before: Apr Not After : Apr 8 09:38:53 2008 GMT 8 09:48:53 2011 GMT

Subject: CN=RICARDO BORILLO DOMENECH - NIF:52945813C/serialNumber=52945813C, GN=RICARDO, SN=BORILLO DOMENECH, OU=Ciudadanos, O=Generalitat Valenciana, C=ES Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:8c:d5:cd:01:b6:f1:a1:76:e6:af:eb:6a:91:e6: Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Key Encipherment, Data Encipherment X509v3 Subject Alternative Name: email:ricardo.borillo@si.uji.es, DirName:/CN=Ricardo|Borillo| Dom\xC3\xA9nech/UID=52945813C X509v3 CRL Distribution Points: Full Name: URI:http://www.accv.es/gestcert/ciudadanos.crl Authority Information Access: OCSP - URI:http://ocsp.pki.gva.es Signature Algorithm: sha1WithRSAEncryption

Expedicin y gestin del DNIe

Cual es el objetivo de la firma digital?

Firma digital
Proceso de firma:

Firma digital
Proceso de verificacin de la firma:

Estndares en criptografa

PKCS#
Public Key Criytography Standard: Laboratorios RSA para criptografa de clave pblica

Estndares en criptografa

PKCS#1: Define el formato del cifrado RSA. PKCS#3: Estndar de intercambio de claves Diffie-Hellman. PKCS#5: Estndar de cifrado basado en contraseas. PKCS#7: Sintaxis del mensaje criptogrfico (CMS). PKCS#8: Sintaxis de la informacin de clave privada PKCS#9: Tipos de atributos seleccionados PKCS#10: Estndar de solicitud de certificacin (CSR). PKCS#11: Interfaz de dispositivo criptogrfico ("Cryptographic Token Interface" o cryptoki, HSM). PKCS#12: Sintaxis de intercambio de informacin personal. PKCS#13: Criptografa de curva elptica (en desarrollo). PKCS#14: Generacin de nmero pseudo-aleatorios (en desarrollo). PKCS#15: Estndar de formato de informacin de dispositivo criptogrfico (DNIe).

Firma digital en Java

Frima digital en Java


CryptoAPI

PKCS#11

Frima digital en Java

Firma digital en Java


Qu es un provider?

Implementacin de un subconjunto del JDK Security API Es un interfaz a otras clases que implementan la funcionalidad deseada

MessageDigest.getInstance("MD5") KeyAgreement.getInstance("DH", "SunJCE")

SunPCSC

SunJGSS

SunPKCS11
SUN SunJSSE SunRsaSign

SunSASL SunJCE

XMLDSig

SunMSCAPI

SunPCSC

SunJGSS

SunPKCS11
SUN SunJSSE SunRsaSign

c n SunMSCAPI u o
XMLDSig

a C y

SunSASL

le t s
SunJCE

Firma digital en Java

KeyStore:
Acceso a certificados y claves

Firma digital en Java

JKS. Java KeyStore. Fichero en disco + PIN.


KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(new FileInputStream("certs.keystore"), "pin".toCharArray());

PKCS#12. Fichero en disco + PIN


KeyStore keyStore = KeyStore.getInstance("PKCS12"); keyStore.load(new FileInputStream("certs.p12"), "pin".toCharArray());

Firma digital en Java

Firma digital en Java

PKCS#11. Tarjeta inteligente o HSM + PIN.


String configuration = "name=dnie\rlibrary=/usr/lib/opensc-pkcs11.so"; Provider provider = new sun.security.pkcs11.SunPKCS11( new ByteArrayInputStream(configuration.getBytes())); Security.addProvider(provider);

KeyStore keyStore = KeyStore.getInstance("PKCS11", provider); keyStore.load(null, "pin".toCharArray());

Firma digital en Java

Windows-MY. Store de Windows, el cual gestiona el acceso.


keyStore = KeyStore.getInstance("Windows-MY"); keyStore.load(null, null);

keyStore = KeyStore.getInstance("Windows-ROOT"); keyStore.load(null, null);

Firma digital en Java


Con el KeyStore tenemos acceso a una lista de alias.
List<String> aliasList = Collections.list(keyStore.aliases());

Y con los alias podemos acceder a:

Certificados
Certificate certificate = keyStore.getCertificate(alias);

Claves
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, null);

Firma digital en Java


As ya podemos realizar firmas:
Signature signature = Signature.getInstance("SHA1withRSA", provider); signature.initSign(privateKey); signature.update(data); byte[] signatureValue = signature.sign();

y verificarlas:
Signature signature = Signature.getInstance("SHA1withRSA"); signature.initVerify(certificate); signature.update(data); signature.verify(signatureValue);

Formatos de firma

Formatos de firma
Firma "en bruto", PKCS#1 o RSA bsica.

Formatos de firma
Firma XML:

W3C XML Signature ETSI XAdES: XML Advanced Electronic Signatures OpenDocument. JAR + XML Signature

Usos:

Formatos de firma

Formatos de firma

Formatos de firma

Enriquecimiento de firmas: De XAdES-EPES a XAdES-A ...

Formatos de firma

Formatos de firma
CMS:

CMS/PKCS#7 CAdES PKCS#7 en PDF PadES

Base para: S/MIME, PKCS#12 o Timestamping

DNIe: Caractersticas y estndares

IDESP12345678Z3<<<<<<<<<<<<<<< 7410150M0903226ESP<<<<<<<<<<<4 DE<TAL<Y<CUAL<<FULANITO<<<<<<<

DNIe: Caractersticas y estndares


El DNIe almacena:

Los datos de filiacin del ciudadano Los datos biomtricos (modelo dactilar, foto y firma manuscrita) Los dos pares de claves RSA con sus respectivos certificados.

El chip del DNI electrnico:

Nombre comercial: ST19WL34 Sistema operativo: DNIe v1.1 Capacidad de memoria: 32Kb

DNIe: Caractersticas y estndares


La tarjeta cumple el estndar ISO-7816-1 Comunicacin con el dispositivo mediante APDUs (Application Protocol Data Unit):

ISO 7816-4: Organizacin, la seguridad y los comandos para el intercambio de informacin ISO 7816-8: Comandos para operaciones de seguridad

DNIe: Caractersticas y estndares


Zonas de seguridad:

Zona pblica. Certificado AC intermedia, Claves DiffieHellman y Certificado x509v3 de componente. Zona privada. Accesible con PIN: Certificado de Firma y de Identificacin. Zona de seguridad. Accesible en lectura por el titular en los Puestos de Actualizacin del DNIe (PAD): Datos de filiacin del ciudadano, foto y firma. Zona lgica inaccesible. Claves RSA privadas y el modelo de la impresin dactilar. Slo a travs del SO del chip.

DNIe: Caractersticas y estndares


DNIe cumple PKCS#15:

DNIe: Caractersticas y estndares


Canal seguro:

Firma digital con DNIe

Firma digital con DNIe


Dos opciones para interactuar con el dispositivo:

PKCS#11 o CSP Envo de APDU

Firma digital con DNIe

Inicialmente PKCS#11 y CSP disponibles en:


http://www.dnielectronico.es/descargas/index.html

Problemas:

Windows. Peticin reiterada del PIN. Linux. Integracin con opensc. MacOSX. Problemas de instalacin.

Firma digital con DNIe

Problemas integracin opensc:

Anclado en distribuciones antiguas de linux. Sin actualizaciones Slo funciona con versiones fijas de opensc. No se libera el cdigo fuente. Problemas de licencia.

Firma digital con DNIe

Problemas integracin opensc:

Anclado en distribuciones antiguas de linux. Slo funciona con versiones fijas de opensc. No se libera el cdigo fuente. Problemas de licencia.

Firma digital con DNIe


La comunidad del software libre al rescate!!!

Juan Antonio Martnez jonsito desarrolla OpenDNIe: http://opendnie.cenatic.es/

Firma digital con DNIe


Instalacin al lmite:

sudo apt-get install build-essential pkg-config autoconf automake docbookxsl subversion pcscd libpcsclite-dev pcsc-tools libreadline6 libreadline-dev libopenct-dev openssl libssl-dev libtool libltdl-dev libccid svn checkout https://svn.forge.morfeo-project.org/opendnie/opensc-opendnie/trunk cd trunk; ./bootstrap; ./configure make; sudo make install

Comprobaciones varias:

opensc-explorer. Acceso interactivo a una smart card. sudo dnie-tool -av. Muestra informacin de un DNIe. pcsc_scan. Comprueba el lector e identifica la tarjeta. pkcs15-tool -L. Manipulacin de estructuras de datos PKCS#15.

Firma digital con DNIe


Instalacin en MacOSX:

Binarios:
http://www.kounch.com/download/opendnie/

Compilacin desde los fuentes:


http://bit.ly/GDoxQk

Firma digital con DNIe


Mediante envo de APDU: DNIe Java Provider

Uso de javax.smartcardio Autor: Luis Fernando Pardo http://es.linkedin.com/in/lfern Pgina principal + Putty DNIe: http://puttydnie.es/puttydnie/dnie-provider Cdigo fuente: https://github.com/lfern/dnieprov

Firma digital con DNIe


Provider p = new DnieProvider(); Security.addProvider(p); KeyStore ks = KeyStore.getInstance("DNIe"); ks.load(null,null); for (String alias : Collections.list(keyStore.aliases())) { System.err.println("Alias: " + alias); if (keyStore.isCertificateEntry(alias)) { System.err.println(">>> is cert"); Certificate cert = keyStore.getCertificate(alias); System.out.println(cert); } else { System.err.println(">>> is key"); } }

Firma digital con DNIe

https://github.com/borillo/codemotion-dnie

Herramientas y libreras disponibles

Herramientas y libreras disponibles


CryptoApplet:
https://universitatjaumei.jira.com/browse/CRYPTOAPPLET

Formatos:

PKCS#1 CMS/PKCS#7 XML Signature XAdES-X-L Facturae PDF con firma visible OpenOffice

Funcionalidades:

DNIe API JavaScript Firma por lotes Validadores

Herramientas y libreras disponibles


Cliente de firma @firma:
http://forja-ctt.administracionelectronica.gob.es/web/clienteafirma

Formatos:

PKCS#1 CMS/PKCS#7/CAdES XML Signature XAdES-EPES PDF/PAdES OpenOffice OOXML

Funcionalidades:

DNIe API JavaScript Firma por lotes Amplio soporte SO

Herramientas y libreras disponibles


Cliente de firma @firma:
http://forja-ctt.administracionelectronica.gob.es/web/clienteafirma

Formatos:

PKCS#1 CMS/PKCS#7/CAdES XML Signature XAdES-EPES PDF/PAdES OpenOffice OOXML

Funcionalidades:

DNIe API JavaScript Firma por lotes Amplio soporte SO

Herramientas y libreras disponibles


eID Applet:
http://code.google.com/p/eid-applet/

Formatos:

XAdES-A Gran soporte Smart Card Referencia de cdigo Muchos mdulos DSS

Herramientas y libreras disponibles

CryptoApplet, @firma y eID se pueden usar como libreras Otras:

jXAdES de Universitat Jaume I (XAdES-T):


https://universitatjaumei.jira.com/browse/JXADES

Componentes de MITyC (XadES-X-L, OCSP, TSA):


http://oficinavirtual.mityc.es/componentes/

Arang de ACCV (XAdES-X-L y PAdES-LTV):


http://www.accv.es/descargas/Setup/arangi/latest/arangi_base/index.html

Preguntas?

Вам также может понравиться