Seguridad en la Plataforma Java 2 JDK 1.2

Aqu� est�n las clases principales del API de Seguridad del JDK 1.2.

.�Clases de Control de Acceso

.�Clases de Permisos

Las clases de permisos representan accesos a los recursos del sistema. La clase

java.security.Permission

es una clase abstracta y sus subclases, representan accesos espec�ficos.

Los clientes pueden definir f�cilmente sus propios permisos, subclasificando la clase Permission o una de sus subclases, como

java.security.BasicPermission

Las subclases de permisos (otras distintas de BasicPermission) generalmente pertenecen a sus propios paquetes. As�, FilePermission se encuentran en el paquete java.io.

Los tipos de permisos (clases) incluidas en el JDK 1.2 son.

  • java.security.AllPermission
  • java.io.FilePermission
  • java.net.SocketPermission
  • java.net.NetPermission
  • java.security.SecurityPermission
  • java.lang.RuntimePermission
  • java.util.PropertyPermission
  • java.awt.AWTPermission
  • java.lang.reflect.ReflectPermission, y
  • java.io.SerializablePermission.

Los permisos t�picamente tienen un "nombre" y algunas veces una "acci�n". Las clases como FilePermission y SocketPermission que tienen una sintaxis de nombre m�s complicados que los usados por las subclases de BasicPermission directamente desde Permission en vez de desde BasicPermission. Por ejemplo, para un objeto java.io.FilePermission, el nombre del permiso es el path de un fichero (o directorio), mientras que el nombre del permiso para un BasicPermission es simplemente el nombre del permiso dado (por ejemplo, "exitVM", "setFactory", "queuePrintJob", etc).

Algunas de las clases de permisos tienen una lista de "acciones" que dice las acciones que tiene permitidas el objeto. Por ejemplo, para una objeto java.io.FilePermission la lista de acciones (como "read, write") espec�fica las acciones permitidas para el fichero especifico (o para ficheros en el directorio especificados).

Otras clases de permisos son los permisos "nombrados" - aquellos que contienen un nombre pero no una lista de acciones.

BasicPermission se utilizan comunmente como clase base para permisos "nombrados", ya que en ellos, la cadena de acci�n (heredada de Permission) no se utiliza. Las subclases pueden implementar acctiones en la parte superior de BasicPermission, si se desa.

.�Pol�tica

La pol�tica para el entorno de aplicaci�n Java (especificando que permisos est�n disponibles para el codigo de varias fuentes) esta representado por un objeto Policy. M�s espec�ficamente, est� presentado por una subclase de Policy proporcionando una implementaci�n de los m�todos abstractos de la clase Policy.

La localizaci�n de la fuente para la informaci�n de pol�tica utilizadas por el objeto Policy se configura en la implementaci�n de Policy. La implementaci�n por defecto incluida con el JDK obtiene su informaci�n desde los ficheros de configuraci�n de pol�tica est�ticos.

.�AccessController

La clase AccessController se utiliza para tres prop�sitos.

  • El m�todo checkPermission decide si est� permitido o denegado un acceso a un recurso cr�tico del sistema, bas�ndose en la pol�tica de seguridad activa en ese momento. Es invocado por el m�todo checkPermission del SecurityManager .
  • Los m�todos doPrivileged marcan el c�digo como privilegiado, lo que afecta a las subsecuentes determinaciones de accesos.
  • El m�todo getContext obtiene una "fotograf�a" del contexto de llamada actual para que las decisiones de control de acceso desde un contexto diferente puedan hacerso con respecto al contexto guardado.

.�AccessControlContext

Un AccessControlContext se usa para tomar las decisiones sobre accesos a recursos del sistema bas�ndose en el contexto que encapsula. El prop�sito de esta clase es para aquella situaciones donde se deber�a realizar un chequeo de seguridad dentro de un contexto dado que actualmente necesita hacerse desde dentro de un contexto diferente (por ejemplo, desde otro thread).

.�PrivilegedAction y PrivilegedExceptionAction

PrivilegedAction representa un c�lculo a realizar con privilegios activados. El c�lculo se realiza llamando al m�todo AccessController doPrivileged sobre el objeto PrivilegedAction.

El interface PrivilegedAction s�lo se usa para c�lculos que no comprueban excepciones; los c�lculos que comprueba excepciones deben usar PrivilegedExceptionAction en su lugar.

.�CodeSource

El c�digo ejecutado siempre se considera que viene desde una "fuente de c�digo" particular (representada por un objeto del tipo CodeSource). Un CodeSource consiste en una URL (especificando la localizaci�n de donde es originario el c�digo) y un conjunto de certificados que contienen las claves p�blicas correspondientes a las claves privadas usadas para firmar el c�digo (si el c�digo fue firmado).

.�ProtectionDomain

Esta clase encapsula las caracter�sticas de un dominio, que encierra un conjunto de clases cuyos ejemplares tienen concedidos el mismo conjunto de permisos.

Adem�s de un conjunto de permisos, un dominio est� compuesto por un CodeSource, que es un conjunto de PublicKey junto con un codebase (en el formato de una URL). As�, las clases firmadas por las mismas claves y desde la misma URL est�n situadas en el mismo dominio.

.�SecureClassLoader

Esta es una implementaci�n concreta de java.lang.Classloader que tambi�n maneja la carga remota de clases (por ejemplo, desde una URL o InputStream). Todos los appets y aplicaciones (excepto para las clases de sistema) son cargadas por un SecureClassLoader directamente o indirectamente.

.�Clases de Criptograf�a

.�Provider

El t�rmino "Cryptographic Service Provider" ("proveedor" para acortar) se usa para referirse a un paquete o conjunto de paquetes que suministra una implementaci�n concreta de un conjunto de aspectos de criptograf�a del API de Seguridad del JDK. La clase Provider es el interface a dicho paquete o conjunto de paquetes. Tiene m�todos para acceder al nombre del proveedor, el n�mero de versi�n y otras informaciones.

Hay varios tipos de servicios que pueden ser implementados por paquetes proveedore s-- puedes ver Clases Motor.

.�Signature

La clase Signature es una clase motor dise�ada para proporcionar la funcionalidad de un algoritmo de firma digital como el DSA o RSA con MD5. Un algoritmo de firma toma una entrada de tama�o arbitrario y una clave privada y generan una cadena debytes relativamente corta (o de tama�o fijo), llamada firma, con las siguientes propiedades.

  • Dando la clave p�blica correspondiente a la clave privada usada para generar la firma, deber�a se posible verificar la autenticidad e integridad de la entrada.
  • La forma y la clave p�blica no revelan nada sobre la clave privada.

Un objeto Signature puede usarse para generar una firma digital para datos. Tambi�n puede usarse para verificar si la firma recibida es aut�ntica o no.

.�MessageDigest

La clase MessageDigest es una clase motor dise�ada para proporcionar la funcionalidad de seguridad criptogr�fica resumen de mensaje como SHA-1 o MD5. Un resumen de mensaje seguro criptogr�ficamente toma una entrada de tama�o arbitrario (un array de bytes), y genera una salida de tama�o fijo, llamada digest. Un digest tiene las siguientes propiedades.

  • Deber�a ser computacionalmente infalible para encontar otra cadena de entrada que genere el mismo resumen de mensaje.
  • El resumen no revela nada sobre la entrada que fue utilizada para generarlo.

Los res�menes de mensajes se usan para producir un identificador de datos �nico y fiable. Algunas veces se les llama "huellas digitales" de los datos.

.�Clases e Interfaces de Claves

.�Key

El interface Key es el interface de m�s alto nivel para todas las claves opacas. Define la funcionaliad compartida por todos los objetos key opacos.

Nos ofrece acceso limitado a la clave -- s�lo define tres m�todos : getAlgorithm, getFormat, y getEncoded.

Las claves se obtienen generalmente a trav�s de generadores de claves, certificados, especificaciones de claves (usando un KeyFactory), o una implementaci�n de KeyStore para acceder a una base de datos de "keystore" usada para manejar claves.

Es posible analizar claves codificadas, de una forma dependiente del algoritmo, usando un KeyFactory.

.�PublicKey y PrivateKey

Los interfaces PublicKey y PrivateKey (los dos decienden de Key) son interfaces sin m�todos usados para seguridad e identificaci�n de tipos para public keys y private keys.

.�KeyPair

La clase KeyPair es un simple contenedor para una pareja de claves (una clave p�blica y otra privada). Tiene dos m�todos p�blicos, una para devolver la clave privada, y otro para devolver la clave p�blica.

.�KeyPairGenerator

La clase KeyPairGenerator es una clase motor usada para generar parejas de claves p�blica y privada.

.�KeyFactory

La clase KeyFactory es una clase motor dise�ada para proporcionar conversiones entre claves criptogr�ficas opacas (del tipo Key) y especificaciones de clave (representaciones transparentes del material clave importante).

Las f�bricas de claves son bi-direccionales, es decir, permiten construir un objeto key opcaco desde una especificaci�n de clave dada (material clave), o recuperar el material clave de un objeto key en un objeto entendible.

.�KeyStore

Se puede usar una base de datos llamada "keystore" para manejar un repositorio de claves y certificados.

La clase KeyStore es una clase motor que suministra interfaces bien definidos para acceder y modificar la informaci�n de un keystore. Es posible desde aqu� tener implementaciones concretas diferentes, donde cada implementaci�n es para un tipo de keystore particular.

Hay una implementaci�n interna por defecto, proporcionada por Sun Microsystems. Implementa el keystore como un fichero, utilizando un tipo de keystore propietario llamado "JKS". Protege cada clave privada con su password individual, y tambi�n protege la integridad del propio keystore con un password (posiblemente diferente).

.�Clases e Interfaces de Especificaciones de Claves

Las especificaciones de claves son representaciones transparentes del material importante que constituye una clave.

Una representaci�n transparente de una clave significa que podemos acceder individualmente a los valores del material importante, a trav�s de uno de los m�todos "get" definidos en la especificaci�n de la clase correspondiente.

Una clave puede especificarse de una forma espec�fica del algoritmo, o en una forma independiente del algoritmo del formado de codificaci�n (como ASN-1). Por ejemplo, una clave privada DSA podr�a especificarse por sus componentes x, p, q, y g (puedes ver DSAPrivateKeySpec), o podr�a ser especificada usando el codificador DER (puedes ver PKCS8EncodedKeySpec).

Las clases e interfaces de especificaciones de claves aparecen en el paquete java.security.spec.

.�KeySpec

Este interface no contiene m�todos ni constantes. Su �nico prop�sito es agrupar (y proporcionar un tipo seguro) para todas las especificaciones de clave. Todas las especificaciones de claves deben implementar este interface.

.�DSAPrivateKeySpec

Esta clase (que implementa el interface KeySpec) especifica un clave privada DSA con sus par�metros asociados.

.�DSAPublicKeySpec

Es clase (que implementa el interface KeySpec) especifica una clave p�blica DSA con sus par�metros asociados.

.�RSAPrivateKeySpec

Esta clase (que implementa el interface KeySpec) especifica una clave privada RSA.

.�RSAPrivateCrtKeySpec

Esta clase (que desciende de la clase RSAPrivateKeySpec) especifica una clave privada RSA, definida seg�n el est�ndard PKCS#1,usando los valores Chinese Remainder Theorem (CRT).

.�RSAPublicKeySpec

Esta clase (que implementa el interface KeySpec) espec�fica una clave p�blica RSA.

.�EncodedKeySpec

Esta clase abstracta (que implementa el interface KeySpec) representa una clave p�blica o privada en formato codificado.

.�PKCS8EncodedKeySpec

Esta clase, que es una subclase de EncodedKeySpec, representa la codificaci�n DER de una clave privada, de acuerdo con el formado especificado por el est�ndard PKCS #8.

.�X509EncodedKeySpec

Esta clase, que es una subclase de EncodedKeySpec, representa la codificaci�n DER de una clave privada, de acuerdo con el formado especificado por el est�ndard X.509.

.�Clases de Par�metros de Algoritmo

.�AlgorithmParameters

La clase AlgorithmParameters es una clase motor que proporciona una representaci�n opaca de par�metros de criptograf�a.

Una representaci�n opaca es aquella en la no se tiene acceso directo a los campos de par�metros; s�lo podemos obtener el nombre del algoritmo asociado con el conjunto de par�metros y alg�n tipo de codificaci�n para el conjunto de par�metros.

.�AlgorithmParameterGenerator

La clase AlgorithmParameterGenerator es una clase motor usada para generar un conjunto de par�metros usados con un cierto algoritmo (el algoritmo especificado cuando se cre� un ejemplar AlgorithmParameterGenerator).

.�Clases e Interfaces de Especificaci�n de Par�metros de Algoritmo

Una espec�ficaci�n de par�metros de algoritmo es una representaci�n transparente de un conjunto de par�metros usados con un algoritmo.

Una representaci�n transparente de par�metros significa que podemos acceder a cada valor individual, a trav�s de uno de los m�todos "get" definidos en la clase correspondiente.

Las clases e interfaces de especificaci�n de par�metros aparecen en el interface java.security.spec.

.�AlgorithmParameterSpec

AlgorithmParameterSpec es un interface para una especificaci�n transparente de par�metros criptogr�ficos. Este interface no contiene m�todos ni constantes. Su �nico prop�sito es agrupar (y proporciona un tipo seguro) para todas las especificaciones de par�metros. Todos las especificaciones de par�metros deben implementar este interface.

.�DSAParameterSpec

Esta clase (que implementa el interface AlgorithmParameterSpec) especifica el conjunto de par�metros usados con el algoritmo DSA.

.�Clases de Certificados

.�Certificate

La clase java.security.cert.Certificate es una abstracci�n para los certicados que tienen diferentes formatos pero importantes usos comunes. Por ejemplo, diferentes tipos de certificados, como X.509 y PGP, comparten funcionalidades generales (como la codificaci�n y verificaci�n) y algunos tipos de informaci�n (como una clave p�blica).

.�CertificateFactory

La clase java.security.cert.CertificateFactory es una clase motor que define la funcionalidad de una f�brica de certificados. que se usa para generar objeto certificate y listas de revocaciones de certificados (CRL) desde sus codificaciones.

.�X509Certificate

La clase java.security.cert.X509Certificate es una clase abstracta para certificados X.509. Proporciona una forma est�ndard de acceder a todos los atributos de un certificado X.509.

.�SecureRandom

La clase SecureRandom es una clase motor que proporciona funcionalidad para un generador de n�meros aleatorios.

.�Security

La clase Security maneja proveedores instalados y propiedades de seguridad. S�lo contiene m�todos est�ticos y nunca se ejemplariza.

.�SecurityManager

java.lang.SecurityManager es una clase que permite a las aplicaciones implementar una pol�tica de seguridad. Permite a una aplicaci�n determinar, antes de realizar un operaci�n posiblemente insegura, que operac�n es, y decidir si est� o no pemitida su ejecuci�n.

La clase SecurityManager contiene muchos m�todos con nombres que empiezan con la palabra check. Estos m�todos son llamados por varios m�todos de la librer�a de ejecuci�n antes de aquellos m�todos que realizan acciones potencialmente sensibles.

Como en el JDK 1.2, la implementaci�n por defecto de cada m�todo checkXXX es para llamar al m�todo checkPermission(java.security.Permission perm), analizando el permiso requerido para realizar la operaci�n. El m�todo checkPermission determian si se debe conceder o denegar el permiso especificado al llamador.

AccessController.checkPermission(perm);

Si el acceso est� permitido, checkPermission retorna calladamente. Si es denegado, se lanza una SecurityException.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR