Login Barrapunto
Usar Keyczar en .NET
Entrada escrita por desas3 y
editada por mig21
el 14 de Junio 2009, 20:04h
desde el dept. portabilidad-interoperabilidad-y-todo-lo-demás
desde el dept. portabilidad-interoperabilidad-y-todo-lo-demás
desas3 nos cuenta en su bitácora:
Hace unos meses que Stephen Weis, a quien tengo la suerte de tener de compañero en Google, junto con Arkajit Dey y la ayuda de otros, publicó Keyczar, una biblioteca, disponible para Java, Python y C++, los tres principales lenguajes de programación que se usan en Google, que facilita enormemente el uso de las cuatro funciones criptográficas principales (cifrado, descifrado, firma y verificación de la firma) y el cambio y versionado de las claves utilizadas. Un resultado indirecto de la elección de Google es que Keyczar no está disponible para .NET. Dándole vueltas un poco a cómo podría cambiar esto -C# es un lenguaje que me gustó mucho cuando programé un poco con él, igual que MonoDevelop-, se me ocurrieron varias opciones. Por orden: portar el código a C# u otro lenguaje .NET, compilar la versión de C++ como una dll, o usar la versión de Java. Un port sería lo mejor, pero también parece muy trabajoso, no tengo mucho tiempo libre, y hace ya mucho desde que programé (sólo un poco) en C#. Estoy en las mejores condiciones para portar el código y hacerlo mal. La versión de C++ sólo puede usarse en Linux. Aunque para mí no sería problema, me pareció un esfuerzo menos útil que una versión que pudiera ejecutarse en varios sistemas operativos. Así que decidí probar con la biblioteca en Java. En la página ampliada todos los detalles.
Todos los que nos dedicamos a la seguridad aprendemos rápido que los principales problemas del uso de la criptografía no están en la fortaleza de los algoritmos, sino en la implementación y uso de los mismos y en la gestión de las claves. Keyczar intenta que, como se dice en inglés, sea difícil dispararnos en nuestro propio pie al usar criptografía en nuestras aplicaciones.
Que Google restrinja los lenguajes usados en producción a tres tiene sus ventajas e incovenientes (interesados en una flamewar pueden leer este artículo de Steve Yegge).
Alguien que se encontró en una situación similar, escribió IKVM.NET, un interesante proyecto que proporciona interoperatibilidad (hasta cierto punto) entre Java y .NET. Una de las herramientas que IKVM.NET incluye es ikvmc, un compilador de bytecode Java a .NET. Básicamente, como su página de manual indica, un programa que transforma aplicaciones y ficheros JAR en ensamblados (assemblies) .NET. Así que la idea era usar ikvm para convertir la biblioteca Keyczar en un assembly .NET.
Para ello, hay que descargar los siguientes archivos JAR.
Creamos el directorio ~/keyczar y copiamos los JAR dentro. En este directorio, ejecutamos ikvm:
Para ello, creamos un proyecto en Monodevelop (yo lo he llamado keyczarusage) y le añadimos el assembly que hemos creado, keyczar06b-1.6-052809.dll. Además, hay que escribir esta clase Main.cs:
Que Google restrinja los lenguajes usados en producción a tres tiene sus ventajas e incovenientes (interesados en una flamewar pueden leer este artículo de Steve Yegge).
Alguien que se encontró en una situación similar, escribió IKVM.NET, un interesante proyecto que proporciona interoperatibilidad (hasta cierto punto) entre Java y .NET. Una de las herramientas que IKVM.NET incluye es ikvmc, un compilador de bytecode Java a .NET. Básicamente, como su página de manual indica, un programa que transforma aplicaciones y ficheros JAR en ensamblados (assemblies) .NET. Así que la idea era usar ikvm para convertir la biblioteca Keyczar en un assembly .NET.
Para ello, hay que descargar los siguientes archivos JAR.
- El JAR de Keyczar (versión 1.6-052809)
- El ZIP de la biblioteca log4j de Mozilla. El archivo JAR que vamos a utilizar está dentro de este archivo ZIP y se llama log4j-1.2.15.jar
- El ZIP de GSON, una biblioteca de serialización Java a JSON. El archivo JAR que vamos a utilizar está dentro de este archivo ZIP y se llama gson-1.3.jar
- El JAR de la biblioteca JSS de Mozilla, que puede obtenerse también de Google Code.
Creamos el directorio ~/keyczar y copiamos los JAR dentro. En este directorio, ejecutamos ikvm:
Los mensajes de error se deben a que ikvmc utiliza las clases java implementadas por la OpenJDK, y la biblioteca log4j depende de ellos. Aún así podremos utilizar la DLL resultante, salvo que configuremos log4j de forma que los use (por ejemplo para que envíe correo electrónico).~/keyczar$ ikvmc -target:library keyczar06b-1.6-052809.jar jss-4.jar gson-1.3.jar log4j-1.2.15.jar
Warning IKVMC0107: skipping resource (name clash): "META-INF/MANIFEST.MF"
Note IKVMC0002: output file is "keyczar06b-1.6-052809.dll"
Warning IKVMC0100: class "javax.jms.Message" not found
Warning IKVMC0100: class "javax.jms.Destination" not found
Warning IKVMC0100: class "javax.jms.JMSException" not found
Warning IKVMC0100: class "javax.mail.Session" not found
Warning IKVMC0100: class "javax.mail.internet.MimeMessage" not found
Warning IKVMC0100: class "javax.mail.Message" not found
Warning IKVMC0100: class "javax.mail.MessagingException" not found
Warning IKVMC0100: class "javax.mail.internet.InternetAddress" not found
Warning IKVMC0100: class "javax.mail.Address" not found
Warning IKVMC0100: class "javax.mail.Message$RecipientType" not found
Warning IKVMC0105: unable to compile class "org.apache.log4j.net.SMTPAppender$1"
(missing class "javax.mail.Authenticator")
Warning IKVMC0100: class "org.apache.log4j.net.SMTPAppender$1" not found
Warning IKVMC0100: class "javax.mail.Authenticator" not found
Warning IKVMC0100: class "javax.mail.internet.AddressException" not found
Warning IKVMC0100: class "javax.mail.internet.MimeBodyPart" not found
Warning IKVMC0100: class "javax.mail.internet.MimeMultipart" not found
Warning IKVMC0100: class "javax.mail.Multipart" not found
Warning IKVMC0100: class "javax.mail.BodyPart" not found
Warning IKVMC0100: class "javax.mail.Part" not found
Warning IKVMC0100: class "javax.mail.Transport" not found
Warning IKVMC0100: class "com.sun.jdmk.comm.HtmlAdaptorServer" not found
Warning IKVMC0100: class "com.sun.jdmk.comm.CommunicatorServer" not found
Warning IKVMC0105: unable to compile class "org.apache.log4j.net.JMSSink"
(missing class "javax.jms.MessageListener")
Warning IKVMC0100: class "javax.jms.TopicConnectionFactory" not found
Warning IKVMC0100: class "javax.jms.TopicConnection" not found
Warning IKVMC0100: class "javax.jms.TopicSession" not found
Warning IKVMC0100: class "javax.jms.Topic" not found
Warning IKVMC0100: class "javax.jms.TopicPublisher" not found
Warning IKVMC0100: class "javax.jms.Connection" not found
Warning IKVMC0100: class "javax.jms.Session" not found
Warning IKVMC0100: class "javax.jms.ObjectMessage" not found
~/keyczar$
Para ello, creamos un proyecto en Monodevelop (yo lo he llamado keyczarusage) y le añadimos el assembly que hemos creado, keyczar06b-1.6-052809.dll. Además, hay que escribir esta clase Main.cs:
Para poder usar este programa, hay que crear una clave de cifrado. Para ello, usamos la herramienta KeyczarTool:using System;
using org.keyczar;
namespace Keyczarusage
{
class MainClass
{
public static void Main(string[] args)
{
Crypter crypter = new Crypter(args[0]);
System.Console.WriteLine(crypter.encrypt("Hello World!"));
System.Console.WriteLine("Please, copy & paste that string below:");
String ciphertext = System.Console.ReadLine();
System.Console.WriteLine("That decrypts to:");
System.Console.WriteLine(crypter.decrypt(ciphertex t));
}
}
}
Ahora ya podemos ejecutar el programa, pasándole la dirección de las claves como parámetro:~/keyczar$ mkdir -p keys/crypt
~/keyczar$ java -cp log4j-1.2.15.jar:gson-1.3.jar:keyczar06b-1.6-05280 9.jar org.keyczar.KeyczarTool addkey --location=~/keyczar/keys/crypt --status=primary
La verdad es que no he probado mucho la biblioteca, sólo esta prueba. Habría que ver si las claves asimétricas funcionan, y probar varias combinaciones, pero en principio parece que es posible usar Keyczar en .NET sin muchas dificultades. Teóricamente, la DLL creada puede usarse tanto en Mono como en .NET en Windows sin ninguna modificación.~/Projects/keyczarusage/keyczarusage/bin/Debug$ ./keyczarusage.exe ~/keyczar/keys/crypt
log4j:WARN No appenders could be found for logger (org.keyczar.Keyczar).
log4j:WARN Please initialize the log4j system properly.
ALJM94ibZlsXDepUUhRahyLgAWMaWSecgP7Fz1I IA-A0M55rlTL4Vc5wtOw3XM3ylG7oDTFFb2ac
Please, copy & paste that string below:
ALJM94ibZlsXDepUUhRahyLgAWMaWSecgP7Fz1IIA- A0M55rlTL4Vc5wtOw3XM3ylG7oDTFFb2ac
That decrypts to:
Hello World!
Historias relacionadas
[+]
Software Libre: Google anuncia el lanzamiento de keyCzar 19 comentarios
Un pobrecito hablador nos cuenta: «Google anuncia el lanzamiento de keyCzar con el objetivo de que la criptografía sea más segura y fácil de usar. keyCzar es un juego de herramientas criptográficas de código abierto que implementan cifrado y autentificación tanto para algoritmos simétricos como de clave pública. Afronta los problemas más comunes en el cifrado eligiendo opciones seguras por defecto, marcando los resultados con la versión de las claves, y proporcionando una API sencilla. Además permite rotar y revocar claves sin tener que preocuparse de la compatibilidad con versiones anteriores o modificar el código fuente. A partir de ahora ya no hay excusa para seguir encriptando tu información sensible en lugares lúgubres y húmedos con la esperanza de que esté segura, ahora basta con cifrarla.»
Más información, en Google Code.
[+]
Software Libre: Mono 2.4 sale a la luz junto con MonoDevelop 2.0 49 comentarios
knocte nos cuenta: «Tal como cuenta Miguel de Icaza, Mono y MonoDevelop desvelan nuevas versiones.
En cuanto al primero, es de destacar la corrección de muchos bugs, mejoras de rendimiento (nuevo JIT, ASP.NET precompilado), soporte de SIMD y grandes avances en Windows.Forms (como el soporte de accesibilidad y la corrección de problemas con el DataBinding). El segundo nos trae increíbles nuevas funcionalidades, como el soporte de C# 3.0, Code Folding, preferencias por proyecto ("políticas"), un nuevo complemento para desarrollo en Vala, Modos de Vi integrados, búsqueda "find as you type" (tipo Firefox), auto-completado en XML, mejoras en el soporte de Subversion (revertir revisiones, resolver conflictos, bloquear/desbloquear archivos), soporte nativo MsBuild, mejoras en el soporte ASP.NET, y ¡el tan esperado depurador integrado! Si eres desarrollador de .NET, ya no hay excusa para probar Mono. Y si eres desarrollador de Gnome, ya no hay excusa para ser algo más productivo :)
¡Casi se me olvida! Los amantes de KDE/QT también pueden usarlo ;)»
Este hilo ha sido archivado.
No pueden publicarse nuevos comentarios.
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.

Por un momento...
(Puntos:3, Divertido)... Barrapunto vuelve a ser lo que era. :-)
iKVM
(Puntos:2, Interesante)Para el resto de los efectos es un jar de pleno derecho (eclipse lo deja adjuntar como librería, puede meterese en classpaths ANT etc).
De hecho para lograr que mi invento funcionara tuve que pasar a
Iron Python
(Puntos:5, Interesante)( http://labotelladeklein.blogspot.com/ | Última bitácora: Sábado, 20 Noviembre de 2010, 16:03h )
El doble de diversión en: La Botella de Klein [blogspot.com]
Imposible
(Puntos:2, Divertido)( http://barrapunto.com/ )
Por cierto, el otro día intenté generar un compilador de ByteCola para portar código PHP a Pascal ensamblado a través de helpers de Ruby 1.9, todo encriptado usando Telnet seguro y bidireccionamieto casuístico de memoria fugaz. No conseguí una puta mierda así que fui al vídeoclub a alquilar Los Angeles de Carlos.
Viendo la película caí en la cuenta de que necesitaba añadir hot-cross-compiling a mi magno proyecto. Así lo hice. Luego bajé a devolver la película y al subir me conecté al messenger y nunca más he tocado mi aplicación. Si alguien está interesado que prepare una pasta gansa.
Gnome es para tontos... ¿por qué tengo este pedazo trabuco?
Re:¿Y la noticia...
(Puntos:3, Inspirado)( Última bitácora: Viernes, 29 Octubre de 2010, 09:43h )
Por ultimo, y en lo que a mi toca, lo unico que veo de novedoso en la entrada de mi bitacora es que describe un modo en que se puede usar keyczar en
Se me ocurrio pobrarlo y, al ver que parecia funcionar, se me ocurrio tambien que a alguien podria interesarle, asi que lo escribi y lo publique por si acaso (sabes donde? en mi bitacora de barrapunto).
Lo siento tio, no lo volvere a hacer, de verdad. Te pido humildemente perdon y te agradezco que dejes todo aquello tan importante que estabas haciendo para iluminarme. Alabado seas, amen.
Este comentario ha sido escrito en Google Chrome dev Build para Linux a partir de electrones 100% reciclados.
Re:Con el debido respeto
(Puntos:2)( http://fishblues.blogspot.com/ )
000100111011010101100012
Re:Con el debido respeto
(Puntos:2)( http://www.manje.net/ | Última bitácora: Viernes, 08 Octubre de 2010, 10:46h )