La seguridad es un aspecto tremendamente importante en las comunicaciones y aplicaciones en la actualidad. Gran parte de la información que los usuarios de smartphones es sensible y puede ser utilizada por usuarios ilegítimos con fines maliciosos que van desde robos de credenciales bancarios o información médica, hasta sustracción de cuentas y contraseñas de redes sociales. Es por esto que he decidido hacer una serie de entradas sobre la seguridad en las comunicaciones y como proporcionar robustez en las mismas en lenguaje Java.
Esta primera entrada es introductoria acerca de los 5 pilares básicos de la seguridad en las redes. En las próximas entradas se expondrá cómo se pueden implementar en Java, orientado a Android, algunos de estos pilares. A partir de ahora se denotará una comunicación con usuarios legítimos A y B entre los que se realiza la comunicación y el usuario C malicioso que pretende acceder a la misma sin autorización. Veamos cuáles son:
- Autenticación. En una comunicación entre dos extremos, lo primero que debe hacerse es asegurar que los dos extremos son quienes dicen ser. Es decir, si el usuario A quiere mandarle un mensaje a B, ambos usuarios deben poder saber que A es A y no un usuario malicioso C que ha suplantado a A (o a B). Es lo que típicamente se realiza cuando un usuario quiere conectarse a un servidor para obtener cierta información. Por ejemplo, para acceder a la cuenta de Twitter un usuario debe proporcionar un usuario y una contraseña que solo él conoce (o debe conocer). Así mismo el usuario tiene que tener seguridad de que se está conectando verdaderamente a Twitter y no a una página con una apariencia falsa.
![]() |
- Integridad. La integridad hace referencia a la autenticidad del contenido del mensaje enviado. Lo que se pretende evitar al proporcionar integridad es que el mensaje que envió el usuario A al usuario B no haya sido modificado por un usuario no autorizado. Este tipo de ataques se conocen como Man in the middle en los que el usuario malicioso intercepta el mensaje, lo lee y lo modifica antes de volver a enviarlo a B. Proporcionar integridad en las comunicaciones es evidentemente un aspecto muy importante, ya que si (por ejemplo) en mensaje que A envía a B es "¿Quieres casarte conmigo?" y el usuario malicioso C lo intercepta y lo modifica de tal manera que ahora sea: "Quiero acabar con esta relación", el resultado de la comunicación es significativamente diferente del deseado por A.
- Confidencialidad. En este caso lo que se pretende es evitar que C, que ha interceptado el mensaje de A a B, sea capaz de leer el contenido. Para evitar esto esto se utiliza el cifrado de la información por parte de A y el posterior descifrado de la información por parte de B.
- No repudio. De igual manera que se quiere proteger y velar por que la información enviada entre A y B sea autentica, íntegra y confidencial, se ha de proporcionar un servicio de no repudio mediante el cual A (o B) no pueda negar el envío de un mensaje. ¿Qué quiere decir esto? Por ejemplo, A ha decidido realizar una compra en una tienda B a través de Internet. Una vez recibido el producto decide que no le gusta y le insiste a B en que no ha realizado dicha compra. Se debe proporcionar un mecanismo que permita a B demostrar que recibió un pedido de compra que, efectivamente, era de A y no de otro usuario. Esto es lo que se conoce como no repudio,
- Disponibilidad. Por último y no menos importante, pese a que en el caso de la programación de dispositivos móviles poco podemos hacer al respecto, es la característica de disponibilidad. Hace referencia a la capacidad de los servicios en la red para ser accesibles por los usuarios legítimos. Dicho de otra manera, lo que se pretende proporcionar con este servicio es que las aplicaciones, páginas web y, en general, sistemas, no puedan ser atacados por usuarios maliciosos y dejar sin servicio a los usuarios que no lo son. El ataque más común a la disponibilidad es el de DoS (Denial of Service o Denegación de Servicio) o DDoS (Distributed DoS). Mediante este ataque lo que se pretende, generalmente, es realizar muchas peticiones a un mismo sistema de manera que se sature y no pueda servir correctamente a los clientes del sistema.
Estos son las 5 características fundamentales que deben proporcionarse en las redes y comunicaciones para que puedan considerarse seguras. Pese a cumplir estos requisitos, nunca puede obtenerse el 100% de la seguridad, pero al menos sí es posible ponerle las cosas difíciles a los mundialmente conocidos hackers.