## Glosario

Abajo están las definiciones y explicaciones de algunos términos y conceptos sobre seguridad gneral y sobre seguridad específica en el JDK, en orden alfabético:

Certificado
  Un certificado es una sentencia firmada digitalmente de una entidad (persona, compañía, etc.), diciendo que la clave pública de alguna otra entidad tiene un valor particular. Si creemos la firma del certificado, creeremos que la asociación incluida en el certificado entre la clave pública especificada y la otra entidad es auténtica.

Algoritmo de Criptografía
  Un algoritmo criptográfico es un algoritmo usado para asegurar uno de los puntos siguientes:
  1. la confidencialidad de los datos
  2. autentificación del emisor de los datos
  3. integridad de los datos enviados
  4. no-repudiación, un emisor no puede negar que ha enviado un mensaje particular.

  Un algoritmo de firma digital proporciona algunas de estas características. También puedes ver algoritmos message digest.

  Una versión separada (Java Cryptography Extensions) proporciona APIs y algoritmos relacionados con la encriptación y desencriptación.

Desencriptación
  Desencriptación es la inversa de encriptación; el proceso de tomar los textos ecriptados y la clave criptográfica, y producir un texto claro (los datos originales son encriptar)

Firma Digital
  Una firma digital es una cadena de bits que se ha calculado desde algunos datos (los datos a ser "firamdos") y la clave privada de la entidad.

  La firma puede ser suada para verificar que los datos fienen de la entidad y que no han sido modificadas durante el tránsito.

  Como una firma escrita, una firma digital tiene muchas características útiles:

  - Se puede verificar su autenticidad, mediante un cálculo que usa la clave pública correspondiente a la clave privada usada para generar la firma.
  - No se puede privar de ella, asumiendo que la clave privada mantiene el secreto
  - Es una función de los datos firmados y no puede ser reclamada como la firma de otros datos.
  - No se pueden modificar los datos firmados; si lo son, la firma no se verificará como auténtica.
Dominio o Protección de Dominio
  Una protección de domino ("dominio" para acortar) encierra un conjunto de clases cuyos ejemplares tienen concedidos los mismos permisos.

  Además de una conjunto de permisos, un dominio comprende un CodeSource, que es un conjunto de PublicKey junto con un codebase (e el formado de una URL). Así, las clases firmadas por la misma clave y desde la misma URL se sitúan en el mismo dominio. Las clases que tienen los mismos permisos pero tienen diferentes códigos fuente pertenecen a diferentes dominios.

  Actualmente en el JDK 1.2, los dominios se crean "bajo demanda" como resultado de la carga de las clases.

  Hoy todo el código enviado como parte del JDK se considera código del sistema y ejecuta dentro del único dominio del sistema. Cada applet o aplicación se ejecutan en su propio dominio, determinado por su código fuente.

Encriptación
  Encriptación es el proceso de tomar los datos (llamado textolimpio) y una clave criptográfica y producir un textoencriptado, que son unos datos sin significado para cualquiera que no conozca la clave.

Clase Motor
  Una "clase motor" define un servicio criptográfico de una forma abstracta (sin una implementación concreta).

  Un servicio criptográfico siempre está sociado con un algoritmo o tipo particular, y proporciona operaciones de criptográfia (como aquellas para firmas digitales o message digests), generada o suministra el material criptográfico (claves o parámetros) requeridos para las operaciones de criptografía, o genera objetos de datos (keystores o certificados) que encapsulan claves criptográficas (que pueden ser usada en una operación criptográfica) de una forma segura. Por ejemplo, dos de las clases motor son Signature y KeyFactory. La clase Signature proporciona acceso a la funcionalidad de un algoritmo de firma digital. Un KeyFactory DSA suministra un clave privada DSA o una clave pública (desde sus especificaciones codificadas o transparentes) en un formato utilizable por los métodos initSign o initVerify, respectivamente, de un objeto Signature DSA.

  Los clientes API piden y utilizan ejemplares de clases motor para llevar a cabo las operaciones correspondinetes. Las siguientes clases motor están definidas en el JDK 1.2:

  - MessageDigest - usada para calcular el mensaje message digest (hash) de los datos especificados.
  - Signature - usada para firmar los datos y verificar las firmas digitales.
  - KeyPairGenerator - usada para generar una pareja de claves pública y privada disponibles para una algoritmo especificados.
  - KeyFactory - usada para convertir claves criptográficas opacas del tipo Key en especificaciones de claves (representaciones (transparentes de material clave), y viceversa.
  - CertificateFactory - usado para crear certificadso de clave pública y Certificate Revocation Lists (CRLs).

  - KeyStore - usado para crear y manejar un keystore. Un keystore es una base de datos de calves. Las claves privadas de un keystore tienen una cadena de certificados asociadas con ellas, que autentifican la correspondiente clave pública. Un keystore tambien contiene certificados de entidades verdaderas.
  - AlgorithmParameters - usado para manejar los parámetros de un algoritmo particular, incluyeno los parámetros de codificiación y descodificación.
  - AlgorithmParameterGenerator - usada para generar un conjunto de parámetros disponibles para un algoritmo especificado.
  - SecureRandom - usada para generar números pseudo-aleatorios.

  Una clase motor proporciona el interface para la funcionalidad de un tipo específico de servicio criptográfico (independiente de un algoritmo criptográfico particular). Define métodos de "Application Programming Interface" (API) que permiten a las aplicaciones acceder a tipos específicos de servicios criptográficos que proporciona. Las implementaciones actuales (para uno o más proveedores) son aquellas para algoritmos específicos. La clase motor Signature, por ejemplo, proporciona acceso a la funcionalidad de un algoritmo de firma digital. La implementación actual suministrada en una subclase SignatureSpi será aquella para una clase específica de algoritmo de firma, como SHA1 con DSA, SHA1 con RSA, MD5 con RSA, e incluso algunos algoritmos de firmas propietarios.

  Los interfaces de aplicación suministrados por una clase motor están implementados en términos de un "Service Provider Interface" (SPI). Es decir, para cada clase motor, hay una correspondiente clase abstracta SPI. que define los métodos del Service Provider Interface que le proveedor de servicios criptográficos debe implementar.

  Un ejemplar de una clase motor se crea llamar al método factory getInstance de la clase motor, que encapsula la implementación del SPI y lo devuelve al llamador. Cada método del API del ejemplar de la clase motor generada incova al métoso del SPI correspondiente del objeto SPI encapsulado.

  El nombre de cada clase SPI es el mismo que el de la correspondiente clase motor, seguido por "Spi". Por ejemplo, la clase SPI correspondiente a la clase motor Signature es la clase SignatureSpi.

Algoritmo Resumen de Mensaje
  Un Resumen de mensaje es una función que toma una antrada de datos de tamaño arbitrario (referido com un mensaje) y genra una salida de tamaño fijo, llamada resumen (o picadillo). Un resumen tiene las siguientes propiedades

  - Debería ser computacionalmente infalible para encontrar otra cadena de entrada que genere el mismo resumen.
  - El resumen no revela nada sobre la entrada usada para generarlo.

  Los algoritmos de resumen de mesnaje se usan para producir un identificador de datos único y fiable . Los resumenes algunas veces se llaman "huellas dactilares digitales".

  Algunos algoritmos de firma digital usan un algoritmo de resumen de mensaje para calbular el picadillo de los datos que están siendo firmados, y luego firma digitalmente el valor del picadillo en vez de firmar los datos originales, ya que firmar los datos originales podría ser muy costoso.

Representación de Clave Opaca
  Una representación de clave opaca es aquella en la que no tenemos acceso directo al material que constituye la clave. En otras palabras: "opaco" ofrece un acceso limita a la clave - tres métodos definidos por el interface "Key": getAlgorithm, getFormat, y getEncoded.

  Esto está en contraste con una representación transparente, en la que podemos acceder a cada valor del material de la clave individualmente, através de uno de los métodos "get" definidos en la especificación de la clase correspondiente.

Representación Opaca de Parámetros
  Una representación de parámetros opaca es aquella en la que no tenemos acceso directo a las campos de parámetros; sólo podemos el nombre del algoritmo asociado con el conjunto de parámetros y alguna clase de codificación para el conjunto de parámetros.

  Esto está en contraste con una representación transparente, en la que podemos acceder a cada valor del material de la clave individualmente, através de uno de los métodos "get" definidos en la especificación de la clase correspondiente.

Permiso
  Un permiso representa acceso a un recurso del sistema. Para poder conceder a un applet el acceso a un recurso (o a una aplicación ejecutándose con un controlador de seguridad), el permiso correspondiente debe concederse explícitamente.

  La policía efectiva para un entorno de aplicación Java específica aquellos permisos que están disponibles para varios fuentes (ver Policía).

  Un permiso tiene típicamente un nombre (frecuentemente definido como "target name") y, en algunos casos, una lista separada por comas de una o más acciones.

  El JDK tiene un número de tipos de permisos internos (clases), y nuevos tipos que pueden ser añadidos por los clientes.

Policía
  La policía en efecto para un entorno de aplicación Java específica qué permisos están disponibles para el código de varias fuentes.

  La localización de la fuente de la información de policía se configura con la implementación de Policía. El JDK contiene una implementación de policía por defecto que obtiene su información desde ficheros de configuración de policía estáticos.

Fichero de Policía
  La policía para un entorno de aplicación Java (especificación de los permisos disponibles para código de varias fuentes) está representada por un objeto Policy.

  La localización de la fuente de la información de policía se configura con la implementación de Policía. El JDK 1.2 contiene una implementación de Policy por defecto que obtiene su información desde ficheros de configuración de policía estáticos, también conocidos como "ficheros de policía".

Clave Privada
  Una clave privada es un número que se supone conocido sólo por una entidad particular. Es decir, las claves privadas siempre deben mantenerse en secreto. Podemos usarlas para generar firmas digitales. Una clave privada siempre está asocidad con una sóla clave pública.

Privilegiado
  Siempre que se intenta un acceso a recuros, todo el código del thread hasta ese punto debe tener permiso para acceder a los recursos, a menos que el código del thread haya sido marcado como "privileged". Es decir, supongamos el control de acceso chequeando las ocurrencias en la ejecución del thread que tiene una cadena de múltiples llamadores. Cuando se llama al método checkPermission de AccessController el llamador más reciente, el algoritmo básico para decidir si se permite o deniega el acceso requerido de esta forma:

  Si el dominio de cualquier llamante de la cadena de llamadas no tiene el permiso requerido, AccessControlException se lanza, a menos que lo siguiene sea cierto: un llamador cuyo dominio tenga concedido el permiso ha sido marcado como "privileged" (ver abajo) y todas las llamadas subsecuente (directas o indirectas) tienen el mismo permiso.

  (Nota: El código de sistema automáticamente tiene todos los permisos.)

  Marcar un código como "privileged" permite a un trozo de código verdadero un permiso temporal para acceder a más recursos de los que tenía disponible el código que lo llamó. Esto es necesario en algunas situaciones. Por ejemplo, una aplicación podría no tener pemritido el acceso directo a ficheros que contienen fuentes, pero la utilidad del sistema para mostrar un documento debe obtneer dichas fuentes, en beneficio del usuario. Para poder hacer esto, la utiliza del sistema se convierte en privilegiada mientras obtiene las fuentes.

Dominio Protegido
  Ver Dominio.

Proveedor
  Las implementaciones para varios algoritmos criptográficos están proporcionadas por Cryptographic Service Providers. Los proveedores son esencialmente paquetes que implementan una o más clases motor para algoritmos específicos. Por ejemplo, el proveedor del JDK, por defecto, llamado "SUN" suministra implementaciones para el algoritmo de firma DSA y los algoritmos de resumen de mensaje MD5 y SHA-1. Otros proveedores podrían definir sus propias implementaciones de estos algoritmos o de otros, como una implementación d euna RSA-basado en algoritmo de firma o del algoritmo de resumen de mensaje MD2.

Clave Pública
  Una clave pública es un número asocido con una entidad particular (por ejemplo, una persona o una organziación). Una clave pública está diseñada para ser conocida por todos aquellos que necesiten interacciones verdaderas con dicha entidad. Una clave pública siempre está asociada con una única clave privada, y puede ser usada para verificar la firma digital generada usando la clave privada.

Controlador de Seguridad
  Actualmente, todo el código de sistema del JDK llama a los métodos del controlador de seguridad para comprovar la policía actualmente en efectivo para realizar controles de acceso. Hay un controlador de seguridad (implementación de SecurityManager) instalado siempre que se ejecuta un applet; el appletviewer y la mayoría de los navegadores, instalan un controlador de seguridad. El controlador de seguridad previene de que el código del applet pueda acceder a recursos a menos que tenga permiso explícito para hacer esto en una entrada en un fichero de policía.

  Un controlador de seguridad no se instala automáticamente cuando se ejecuta una aplicación, y así la aplicación tiene total acceso a los recursos (como fue siempre en el caso del JDK 1.1). Para aplicar la misma política de seguridad para una aplicación encontrada en el sistema local de ficheros como si fuera un applet descargado, ejecutando la aplicación en la máquina virtual jaca con el nuevo argumento de la línea de comandos "-Djava.security.manager" o la propia aplicación debe llamar al método setSecurityManager en la clase java.lang.System para instalar un controlador de seguridad.

Certificado Auto-Firmado
  Un certificado auto-firmado es aquél en que el emisor-firmante es el mismo que el sujeto la entidad cuya clave pública está siendo autentificada por el certificado).

Firma
  Ver Firma Digital.

Código Firmado
  Una forma abrevidad de decir "código en unfichero clases que aparece en un fichero JAR que fue firmado". Ver Firma Digital.

Representación de Clave Transparente
  Una representación de clave transparente significa que puedes acceder a cada valor material de la clave de forma individual, através de uno de los métodos "get" definidos en la específicación de la clase correspondiente. Por ejemplo, DSAPrivateKeySpec define los métodos getX, getP, getQ, y getG, para acceder a la clave privada x, y los parámetros del algoritmo DSA usada para calcular la clave: la pricipal p, la sub-principal q, y la base g.

  Esto está en contraste con una representación opaca, está definido por el interface Key, en el que no tenemos acceso a los campos materiales de la clave.

Representación de Parámetors Transparente
  Una representación transparente de un conjunto de parámetros significa que podemos acceder al valor de parámetro individualmente, a través de uno de los métodos "get" definidos en la especificación de la clase correspondiente. Por ejemplo, DSAParameterSpec define los método getP, getQ, y getG, para acceder a los parámetros comunitarios DSA "p", "q", y "g", respectivamente.

  Eeto está en contraste con una representación opaca, como la suministrada por la clase AlgorithmParameters, en la que no tenemos acceso directo a los campos de parámetros; sólo podemos obtener el nombre del algoritmo asociado con el juego de parémetros (mediante getAlgorithm) y algún tipo de códificación para el conjunto de parámetros (mediante getEncoded).

Ozito