Posted on jul 30, 2011

Posted on jul 30, 2011

DeskSurfing@Day 3

Tras la vuelta de nuevo al panel para ver el estado de las tareas, hoy he comenzado preparando unas slides para la presentación que tenía que realizar a las 12:00 sobre “Infrastructura y servicios de firma digital”.

La verdad es que ha sido genial ver como ha venido un montón de gente de la empresa, y no sólo la gente del propio grupo de desarrollo. La sesión ha servido para dar un repaso al funcionamiento de una autoridad certificadora, algunos de los servicios que ofrece (OCSP/TSA) y el uso aplicado de los procesos de firma digital tanto en herramientas existentes como OpenOffice o Acrobat Reader, como su implementación en aplicaciones web con CryptoApplet.

Sinceramente, lo he pasado genial, ya que estas cosas me encantan :)

Tras la presentación, me he unido a @jjballano para comenzar una nueva tarea que tenía asignada y poder ver así un poco más en detalle el entramado de tests de la aplicación.

Hemos ido avanzando, pero la segunda parte ha quedado pendiente para el día siguiente.

Al final de la jornada, hemos decidido hacer una visita al Betabeers, donde parecía que podríamos encontrar una interesante conversación sobre Desarrollo móvil y JavaScript, acompañada de unas presentaciones de nuevos proyectos.

Al final nos hemos quedado poco rato, pero eso sí, hemos tenido una conversación muy intersante sobre JavaScript con uno de los valores en alza de estas semanas @pasku1.

Posted on jul 27, 2011

DeskSurfing@Day 2

Segundo día en IPSA: Testing day.

El día de hoy ha comenzado con la habitual reunión diaria frente al panel para ver en qué tareas comenzaba a trabajar el equipo. Después del reparto, me he unido a @AlfredoCasado para comenzar una de las historias de usuario que prometía dar guerra.

Aunque era una historia de usuario bastante delicada al afectar partes centrales del producto, es un lujo ver cuando una buena base de tests hacen que todo el trabajo se limite a ir haciendo pequeños ajustes, arreglar tests y finalmente poder añadir la nueva funcionalidad teniendo todo el sistema de nuevo operativo.

Durante la implementación de esta historia de usuario he podido ahondar un poco más en conceptos como los Rules de jUnit, el uso de builders para la inicialización de los datos o las mejoras de expresividada en los asserts con assertThat y Harmcrest.

No ha faltado la visión divertida, a la vez que instructiva de @AlfredoCasado en muchos aspectos del desarrollo, sobretodo en las comparaciones de Google Guice/Spring, JDBC/JPA y otras muchas :)

Al final ha sido un día muy productivo y casi casi hemos completado la historia asignada, con lo que mañana toca afinar unos pequeños detalles y listo.

Adicionalmente, hemos decidido hacer mañana una pequeña presentación a todo el equipo sobre temas de firma. Así que durante una hora intentaré darles una visión sobre los distintos enfoques que se pueden seguir, formatos existentes y herramientas disponibles como CryptoApplet. Espero que sirva para dar a la gente de IPSA una buena impresión de lo que es un DeskSurfing

Eso es todo por hoy. Mañana más …

Posted on jul 26, 2011

DeskSurfing@Day 1

La iniciativa de desk-surfing.org surge con el siguiente objetivo:

“”"
Estamos aquí para poner en contacto a profesionales que quieren mejorar. Para tener un lugar donde encontrar intercambios de puestos de trabajo. Donde unos abren sus puertas a otros para compartir experiencia, conocimiento y metodologías. Todo ello con el objetivo de aprender.
“”"

Este interesante espíritu fué el que motivó mi interés por entrar en contacto con profesionales del mundo del desarrollo ágil de los que poder aprender buenas prácticas y aspectos avanzados de testing.

IPSA ha sido la empresa elegida gracias al talento de su plantilla, la cual cuenta entre sus filas con cracks como @jjballano y @AlfredoCasado.

Como en todo buen intercambio, mi objetivo era poder ofrecer algo al equipo de IPSA, así que durante nuestras conversaciones iniciales, descubrimos el interés de estos por el mundo de la firma digital, los formatos de firma y las APIs existentes.

Bajo estas premisas llegué ayer a Madrid con la intención de pasar cuatro días con el equipo e intercambiar experiencias relativas a testing y firma digital.

Tras el amable recibimiento de @jjballano a mi llegada, comenzamos a comentar distintos aspectos interesantes del desarrollo en los que podríamos colaborar. Empezaba a estar ansioso ya por ponernos manos a la obra y comenzar a trabajar :)

Hoy ha sido mi primer día en las oficinas de IPSA. El día ha comenzado con una reunion con el equipo de desarrollo con el fin de encontrar puntos de interés comunes, y no han tardado en surgir ideas como hacer un spike para testear las posibilidades de CryptoApplet y otras librerías de firma, así como la posibilidad de hacer un pequeño seminario sobre formatos de firma.

Posteriormente, hemos entrado en el día a día del equipo cumpliendo con la demo que tenían pendiente y una posterior retrospectiva y planificación del siguiente sprint.

Me ha sorprendido gratamente la cantidad de personas de negocio que este equipo es capaz de congregar y como se implican estas en el proyecto (unos minutos antes de la demo ya estaban todos por allí exigiendo la realización de la reunión).

Aunque hoy no hemos podido contar con @AlfredoCasado que estaba fuera de la oficina, he tenido la posibilidad de concluir el día haciendo unos tests de generación de firmas longevas XAdES X-L con @jjballano.

Mañana toca sesión de testing aprovechando que en este sprint hay muchas tareas de este ámbito, aunque es posible que también abordemos alguna tarea de front con JavaScript ya que es un punto que tocamos muy a menudo en las aplicaciones UJI.

En conclusión, primera toma de contacto y día intenso de Scrum y spikes de firma digital.

Mañana más :)

Posted on abr 6, 2010

CryptoApplet en el Podcast 80 de JavaHispano sobre criptografía y firma digital

Ya está disponible la entrevista que nos hicieron la gente de JavaHispano sobre criptografía y firma digital.

En ella, a parte de introducir una serie de conceptos básicos acerca de qué es y para qué sirve la criptografía y la firma digital, también tuvimos la ocasión de introducir nuestro proyecto CryptoApplet.

CryptoApplet es un applet de firma digital multiformato, liberado bajo licencia GPL por la Universitat Jaume I de Castellón.

Muchas gracias a Jorge Rubira por contar con nosotros y por la oportunidad de pasar un buen rato hablando de tecnología.

Posted on ago 31, 2009

Múltiples firmas enveloped en un documento XML Signature

Según la especificación del estándar XML Signature del W3C, las firmas “enveloped” son aquellas que están embebidas en los datos originales, de forma que son capaces de excluir su contenido a la hora de verificar el documento original.

Destacan por tener siempre definida una referencia (Reference), con el valor establecido del atributo URI a cadena vacia:

<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue></DigestValue>
</Reference>

Ejemplo de una firma “enveloped”:

El problema es que cuando tenemos más de una firma de este tipo en un mismo documento, es necesario que cada una se excluya a si misma y a las demás firmas a la hora de calcular cualquier digest. Con la transformación “enveloped”, sólo se elimina la propia referencia, quedando en el documento el resto de firmas y haciendo que los cálculos de los digest sean incorrectos.

Para resolver este problema, debemos utilizar XPath Filtering.

Según la especificación, el filtrado XPath en una transformación que nos permite quedarnos con el conjunto de nodos necesario para poder calcular de forma correcta la firma.

En nuestro caso, sustituyendo la transformación “enveloped” por un correcto filtrado, podemos soportar múltiples firmas “enveloped” en un mismo documento:

<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
<XPath xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
not(ancestor-or-self::dsig:Signature)
</XPath>
</Transform>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue></DigestValue>
</Reference>

Si estamos desarrollando en Java, podemos generar este tipo de referencia de la siguiente forma:

Transform transform = fac.newTransform(Transform.XPATH, new XPathFilterParameterSpec(
"not(ancestor-or-self::dsig:Signature)", Collections.singletonMap("dsig", XMLSignature.XMLNS)));
Reference ref = fac.newReference("", fac.newDigestMethod(DigestMethod.SHA1, null),
Collections.singletonList(transform), null, null);