You are on page 1of 77

El proyecto CryptoApplet

Ricardo Borillo
borillo@uji.es

Yo

ndice
Orgenes Situacin actual Relacin con @firma:
Entorno de desarrollo gil

Futuro de CryptoApplet Lneas a largo plazo

Orgenes

2005

2006

Incialmente para PKCS#7

http://proyectostic.uji.es/

Situacin actual y relacin con @firma

Versin 2.1.4
Formatos de firma:

PKCS#1 CMS/PKCS#7 XML Signature XAdES-X-L Facturae PDF (firma visible + timestamp) OpenOffice

Otras:

XAdES-BES enrich Validators Mucho ms ...

jXAdES

Soporte XAdES 1.4.1 XAdES-BES, EPES y T Ninguna dependencia!! Integrado en CryptoApplet Integrado en @firma

Relacin con @firma

Interfaces

Build system Community Signature formats

Entorno de desarrollo gil

Caractersticas y requisitos
Objetivos:

Producir software de calidad (sin bugs) Producir software mantenible y documentado Entorno de trabajo adecuado:

Integrado Predecible Alto de nivel de interaccin entre desarrolladores

Propiedad colectiva del cdigo Construccin y testeo automatizado Versionado gil Por y para la comunidad!!!

En definitiva

QA

Cmo consigo todo esto?

Documentacin y gestin del conocimiento

Documentacin y gestin del conocimiento

Requisitos:

Formato estndar de representacin Documentacin accesible online Fcil modificacin y mantenimiento Conversin a otros formatos como PDF Bsqueda y buena gestin del conocimiento

Gestin de proyectos e incidencias

Gestin de proyectos e incidencias

Requisitos:

Registrao de modificaciones: Bugs, tareas, mejoras, etc. Reparto de la carga entre los desarrolladores Planificacin de versiones en nuestro software Histrico de acciones: Changelog. Cada tarea aade todos los comentarios hasta que se cierra

Gestin de proyectos e incidencias

Multitud de implementaciones disponibles:


Atlassian JIRA Pivotal Tracker Redmine Bugzilla Trac Gforge Etc ...

Gestin de proyectos e incidencias


JIRA:

Lder del mercado Gratis para proyectos Open Source Altamente innovador y usable Gran soporte para metodologas giles Muchos mdulos disponibles Integracin con Netbeans y Eclipse (Mylyn) Muchas mtricas de evolucin del proyecto API de integracin disponible

Sistemas de control de versiones

Sistemas de control de versiones

Requisitos:

Repositorio unificado para el cdigo Soporte para el versionado Soporte para realizar comparaciones entre versiones Comparticin de cdigo entre desarrolladores Integrado con las herramientas de desarrollo

Herramientas de construccin

Herramientas de construccin

Requisitos:

Evitar compilacin, construccin y despliegue manual del cdigo Independencia del IDE Flexibilidad y soporte para casi cualquier tipo de herramienta necesaria Integracin de las pruebas unitarias, generacin de documentacin, despliegue en pre-produccin, mtricas de cdigo Todo en uno y desde un nico sitio!!

Herramientas de construccin

Objetivos:

Evitar errores Aplicacin desplegable por cualquiera sin conocimientos concretos de la misma Control automtico de las dependencias Integracin completa con el entorno Necesario ejecutar siempre los controles de calidad

Integracin continua

Martin Fowler:
Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.

Integracin contnua

Multitud de implementaciones disponibles:


Jenkins / Hudson Travis CI CruiseControl JetBrains TeamCity Atlassian Bamboo Etc ...

Integracin contnua

Jenkins:

Independiente del lenguaje Construccin de software y monitorizacin de procesos tipo CRON Centenares de plugins Responsable de generar todos los artefactos necesarios para una aplicacin:

Documentacin Binarios Tests Informes Anlisis del cdigo

Pruebas unitarias del software

Pruebas unitarias del software


Unit testing Wikipedia:
In computer programming, unit testing is a software verification and validation method in which a programmer tests if individual units of source code are fit for use. A unit is the smallest testable part of an application

Pruebas unitarias del software

Beneficios:

Facilitar el cambio y el refactoring Integracin ms sencilla Documentacin del cdigo Diseo siempre y modular del cdigo (sino no se puede hacer unit testing)

Pruebas unitarias del software

Herramientas:

Pruebas de cdigo: jUnit Pruebas de interfaz: Selenium Pruebas de aceptacin: Cucumber JVM o jBehave Pruebas de estrs: jMeter con independencia del lenguaje en el que est desarrollado el servicio

Anlisis esttico del cdigo

Anlisis esttico del cdigo

Anlisis esttico del cdigo:

El anlisis esttico del cdigo es el proceso de evaluar el software sin ejecutarlo Se aplica directamente sobre el cdigo fuente, sin transformaciones previas ni cambios de ningn tipo Objetivo: Obtener informacin que nos permita mejorar la base de cdigo

Anlisis esttico del cdigo

Encontrar partes del cdigo que puedan:


Reducir el rendimiento Provocar errores en el software Complicar el flujo de datos Tener una excesiva complejidad (complejidad ciclomtica) Suponer un problema en la seguridad

Resumen estructura del ecosistema de software

Futuro de CryptoApplet

3.0

Mejor API JavaScript:


Totalmente scriptable Namespaced API Singleton Orientada a objetos Integracin UI

Firmas en varias fases:


Ms rpido Ms ligero Base para la firma mvil Integracin perfecta portafirmas Disponible ya para PDF

Integracin con @firma:


Interfaces definidas Mdulo de acceso a keystores Soporte 64 bits Safari MacOSX Soporte driver DNIe Java

Lneas a largo plazo

Web Crypto API


ltimo Working Draft 13 September 2012

Primary API Features in scope [1] are: key generation, encryption, decryption, deletion, digital signature generation and verification, hash/message authentication codes, key transport/agreement, strong random number generation, key derivation functions, and key storage and control beyond the lifetime of a single session.

var algorithmSign = { name: "RSASSA-PKCS1-v1_5", params: { hash: { name: "SHA-256", } } }; var keyGen = window.crypto.createKeyGenerator(algorithmKeyGen, false, // temporary false, // extractable ["sign"]); // usage keyGen.oncomplete = function onKeyGenComplete(event) { console.log("Public Key ID: " + event.target.result.publicKey.id); var signer = window.crypto.createSigner(algorithmSign, event.target.result.privateKey.id); signer.oncomplete = function signer_oncomplete(event) { console.log("Finished signer CryptoOperation: " + event.target.result); }; signer.oninit = function signer_oninit(event) { signer.processData(myData); }; }; signer.init();

keyGen.generate();

DOMCrypt
https://github.com/daviddahl/domcrypt http://domcrypt.org/

var mc = window.mozCipher; function signMessage() { var msg = $("message").textContent; mc.pk.sign(msg, function (aSig){ $("results").textContent = aSig; }); } function verifySignature() { var msgTxt = $("message").innerHTML; var sig = $("results").innerHTML; mc.pk.getPublicKey(function(aPubKey) { mc.pk.verify(msgTxt, sig, aPubKey, function(aVer){ $("results-verify").innerHTML = aVer.toString(); alert("Signature has been verified as authentic"); }); }); }

https://bugs.webkit.org/show_bug.cgi?id=62010

Preguntas?