Java es dos cosas: un lenguaje de programación orientado a
objetos y una plataforma software en la que se ejecutan
programas.
En este tema hablaremos de la seguridad en Java, centrándonos
en los aspectos relacionados con la seguridad de la plataforma
Java, aunque describiremos brevemente las características que
hacen de Java un lenguaje de programación seguro.
Los componentes principales de la plataforma Java son:
- Un entorno de ejecución proporcionado por la Máquina
Virtual Java (Java VM o JVM). Este entorno de
ejecución no es ni interpretado ni compilado; es un sistema
híbrido. Los programas se compilan en un formato independiente
de la máquina denominado bytecode y son interpretados
por la Máquina Virtual, que es el único componente de Java que
depende de la plataforma en la que trabajamos (y, por lo
tanto, debe ser portada a cada arquitectura). La
implementación de la JVM es la responsable de la seguridad
incorporada en Java, por lo que es importante que su
implementación sea adecuada.
- Un conjunto de interfaces y arquitecturas
proporcionadas por la Interfaz con el programador de
aplicaciones Java (API de Java). El API de Java es una
colección de componentes software, agupados en bibliotecas o
paquetes de componentes relacionados, que
proporcionan multitud de capacidades útiles para el diseño de
interfaces gáficos, acceso a redes, gestión de E/S, etc. En lo
que respecta a la seguridad el API de Java nos proporciona
paquetes que implementan o dan acceso a herramientas de
seguridad de alto y bajo nivel como algoritmos de
encriptación, firmas electrónicas, gestion de certificados,
etc.
Estudiaremos la seguridad en el entorno Java desde varios puntos
de vista:
- Entorno de ejecución. La seguridad de un sistema
Java para los usuarios está en la máquina virtual, ya que esta
es la que controla qué se puede ejecutar y de que modo,
permitiendonos controlar qué pueden hacer los programas al
ejecutarse en nuestro sistema.
- Interfaces y arquitecturas de seguridad. Para que
las aplicaciones cliente/servidor sean seguras es necesario
emplear técnicas criptográficas. Java proporciona una
arquitectura en la que integrar estas técnicas y un conjunto
de interfaces para simplificar su uso en el desarrollo de
aplicaciones.
El tema se ha estructurado en cuatro bloques más o menos
independientes.
En el primer bloque introduciremos la seguridad desde un punto de
vista teórico, según los siguientes puntos:
- Criptología. En este apartado daremos una breve
introducción a los campos de la criptografía y el
criptoanálisis, presentando su terminología, las herramientas
disponibles y sus aplicaciones.
- Técnicas criptográficas. En este punto
estudiaremos con más detalle algunas de las herramientas
presentadas anteriormente, indicando sus características
principales: grado de seguridad, implementaciones,
disponibilidad, etc.
- Certificados digitales. Descripción de qué son
los certificados digitales, las entidades certificadoras y las
infraestructuras de clave pública.
- Protocolos de red seguros. En este apartado
describiremos los protocolo SSL y TLS.
En el segundo bloque nos centraremos en la seguridad del entorno
de ejecución:
- Seguridad en el entorno Java. En este apartado
hablaremos de la evolución de los mecanismos de seguridad en
Java y explicaremos de que modo se gestionan en el JDK
1.2.
En el tercer bloque hablaremos de la arquitectura de seguridad
Java y las APIs de seguridad:
- Arquitectura Criptográfica. Donde se describe la
arquitectura de soporte de algoritmos criptográficos para el
programador y las extensiones de seguridad.
- Interfaces de seguridad. En este apartado se
describen en detalle las APIs de seguridad de Java y como
emplearlas. Al igual que en el bloque anterior, este punto se
ha separado del anterior para poder usarlo como referencia.
En el cuarto y último bloque introduciremos las últimas
tecnologías de seguridad incorporadas a Java:
- Extensión de Sockets Seguros de Java (JSSE).
Implementación del SSL/TLS en Java.
- Servicio de Autentificación y Autorización de Java
(JAAS). Autentificación de usuarios en Java.