Cifrado y Software Libre

La experiencia del confinamiento nos está llenando de palabras que suenan rebuscadas y sin embargo no son nuevas: cifrado, encriptado, libre, abierto, descentralizado… por qué?

No es cuestión de interés sino de necesidad

Para no adentrarme en un tema político que en algunas regiones del planeta se está volviendo muy común y muy constante, voy a intentar hablar sobre 2 cosas que parecen antítesis: Seguridad y Código Abierto.

¿Cómo podría un Software OpenSource ser seguro?

En pocas palabras, un software de código abierto, tiene la potencialidad de ser más seguro que uno de código cerrado o privativo, ya que, expuesto a la audiencia adecuadamente formada en el tema, puede beneficiarse ampliamente de los conocimientos y correcciones de la comunidad, y tener transparencia en el uso y propósito final de la herramienta.

(…) cuando un programa comenzó como código cerrado y luego se convirtió en código abierto, a menudo comienza a ser menos seguro para cualquier usuario (a través de la exposición a vulnerabilidades), y con el tiempo (digamos unos años) tiene el potencial de ser mucho más seguro que programa cerrado Si el programa comenzó como un software de código abierto, es más probable que el escrutinio público mejore su seguridad antes de que esté listo para ser utilizado por un número significativo de usuarios, pero hay varias advertencias sobre esta declaración (no es una regla férrea).

Chapter 2.4: Is OpenSource good for security?, Secure Programming HOWTO, David A. Wheeler, 2015

Cifrado

PGP, o “Pretty Good Privacy” fue inventado en 1991, y es un programa que proporciona una forma efectiva de cifrar mensajes a partir de claves privadas de descifrado, pertenecientes a cada uno de los eslabones de la cadena (el emisor y el receptor).

Hoy en día usamos PGP y una versión OpenSource llamada GPG (GNU Privacy Guard) para una variedad de tecnologías derivadas que, sin darnos cuenta, usamos todos los días.

Con la llegada de PGP, las cosas cambiaron. Al principio el usuario común no sabía cómo mantener seguras sus comunicaciones y su información personal, ni tampoco empresas y otras entidades querían que se encontrara un método. Por suerte, después de 20 años, PGP ha colmado este vacío, demostrando ser un sistema capaz de garantizar privacidad y libertad.

Kaspersky Daily

Descentralización: Cifrado de Extremo a Extremo

Con la llegada de las redes de información e internet, aparecieron conceptos nuevos, para facilitar la disponibilidad de los sistemas al rededor del mundo, y así como en otros ámbitos como la política y –guiño a los fans de la sucesión de Fibonacci– la naturaleza, surgió el concepto de sistemas descentralizados de información o computación distribuida, y con este, por necesidad, surgió este nuevo viejo concepto de cifrado, en el cual, las claves privadas de descifrado, en lugar de guardarse de forma centralizada en un solo lugar, se quedan en los lugares en los que fueron forjados: Los Usuarios.

El cifrado de extremo a extremo (End to End Encryption) es un sistema de comunicación donde las únicas personas que pueden leer los mensajes son las personas que se comunican. Ningún espía puede acceder a las claves criptográficas necesarias para descifrar la conversación, ni siquiera una empresa que administra el servicio de mensajería.

Wired Magazine: What Is End-to-End Encryption?

De esta manera, la responsabilidad de la seguridad de los mensajes, conversaciones y datos en general, vuelve a donde se originó la necesidad, y es que es el lugar en donde tiene que permanecer, ya que está mas que demostrado que la descentralización distribuye la responsabilidad de la seguridad en sus necesitados, no interesados.

Software de Código Abierto Disponible

Lamentablemente, no hay tanto software disponible que sea OpenSource y además no recopile otro tipo de información a cambio, como “telemetría” y datos personales de usuarios a través de cuentas de correo electrónico y números telefónicos. Pero estos son los que mas se acercan a este modelo de libertad y protección de la propiedad privada:

  • Jitsi
  • Signal (para mensajería y videollamadas no grupales)

Estos 2 sistemas están basados en una tecnología hecha en Google llamada WebRTC que también es OpenSource y que la usan también Google Meet/Hangouts, Facebook Messenger, Discord, HouseParty y otros.

Qué dicen otros Expertos?

La empresa privada AVG Technologies, conocida por el software AVG Antivirus, tiene un blog llamado AVG Signal, con sugerencias de expertos en seguridad y otros temas para los consumidores. Recientemente publicaron un listado con Las mejores aplicaciones de mensajería cifrada en donde han reconocido a Signal como la mejor de este año.

La Fundación Mozilla tiene un sitio de ayuda para el consumidor, llamado Privacy Not Included, con un listado del hardware y software mas popular ordenado en base a qué tan “tenebroso” es. En este listado también se han reconocido a Jitsi y a Signal, pero además muestra los standards de seguridad que cumplimentan las otras alternativas como Google Meet, Microsoft Teams, Zoom, y otros.

 

 

Bubblr updates for Android 7

Hello true believers!

I recently updated Bubblr’s Free and Full version, so you can enjoy using it with your Android Nougats!

Also, some of the updates include:

  • Auto dismiss buttons when clicking on them
  • Updated all the app-compat packages to 25.2.0
  • Bigger Icons 56 dp when not using FABs

Check them out!

Free Version:
https://play.google.com/store/apps/details?id=org.pampanet.mobile.bubblr.free

Full Version (only 2 bucks!):
https://play.google.com/store/apps/details?id=org.pampanet.mobile.bubblr.full

My Guice Integration Adventures: Building Secure RESTful Web Application with Apache Shiro

Intro & Motivation

From my previous post, I created an Maven Archetype to bootstrap a Java Web Application. My next step was to make the Web App Secure somehow, and by recommendation I came into Apache Shiro.

RBAC and Security Management

Apache Shiro has a new way of thinking security, with its Resource Based Access Control  (RBAC, not to be mistaken with Role Based Access Control). Basically, instead of giving access to Roles, you give set access to Resources, in this case RESTful endpoints. This can be applied to all JAX-RS Resources.

Second Approach: Guice + Apache Shiro + Jersey

The way to integrate Shiro into a web application is via the web filters to attach the Security Context into the main context. But I also needed to configure Guice, so it can load the Security Manager and Shiro Realms as Singletons at bootstrap.

I also used Shiro’s AOP Module to support Annotations like @RequiresPermission, but in the long run I stuck with the default way for requesting Permissions.

My overall experience with Shiro was very successful, and I found the Permission approach very intuitive. It’s very customizable also, having the chance to modify the behavior of Sessions (or go totally Sesion-less), Permission levels and Realms to save Users, Roles and Permissions according to your existing data structure.

Finally this framework also counts with a Cryptography package, to manage your passwords in multiple formats (MD5, SHA1, SHA-256, et al.) and to encrypt any kind of data to be shared.

Code Template Project

My github example is in shiro-guice-jersey-bootstrap project. This integrates the following frameworks and libraries:

  • Servlet 2.5
  • Jersey 1.18.1
  • Guice 3.0
  • Apache Shiro 1.2.3
  • guice-persist 3.0
  • gson 2.2.4
  • joda-time 2.4
  • JUnit 4.10

I also made a Maven Archetype from this template in secure-rest-webapp-archetype project.

Conclusions

This kind of projects are very demanded nowadays because of the SaaS and MBaaS architectures, and like I said in previous post, having Jersey makes your RESTful tier compliant with JAX-RS, Guice and Dependency Injection compliant with JSR-330 and the so long standardized Servlet 2.5 spec compliant with any Java Enterprise Application Servers. This makes the app more portable in terms of code sharing/reviewing and more focused on the BackEnd business logic, allowing a more agile workflow for distributed teams.

Next Adventure

My next adventure will involve RESTEasy and Servlet 3.x spec! Stay tuned!

Cheers!

Hello world!

Hello Everyone!

Trying to remember all I do every day is a difficult task, if not impossible. And I’ve found that I was complaining a lot about Social Networks and their verbosity very tight coupled with a lot of irrelevance and indifference about almost every existing topic in life.

So I finally decided to write a blog about my adventures as a Java EE, JavaScript and Node.js Developer. Also in the last years I joined a rock band named Hanging Mantells as their lead guitar and singer, so expect some posts about Grunge and Hard Rocking music!

I’ll probably put all my personal data links in the About page, so you should be able to contact me in GitHub and in the Hanging Mantells Facebook page.

Happy reading!