Buscar..


Introducción

Las prácticas de seguridad en Java se pueden separar en dos categorías amplias, vagamente definidas; Seguridad de la plataforma Java, y programación Java segura.

Las prácticas de seguridad de la plataforma Java se ocupan de gestionar la seguridad y la integridad de la JVM. Incluye temas como la gestión de proveedores de JCE y políticas de seguridad.

Las prácticas de programación de Java seguras se refieren a las mejores formas de escribir programas de Java seguros. Incluye temas como el uso de números aleatorios y la criptografía, y la prevención de vulnerabilidades.

Observaciones

Si bien los ejemplos deben hacerse claramente, algunos temas que deben cubrirse son:

  1. El concepto / estructura del proveedor de JCE
  2. Elemento de lista

La jce

La extensión de criptografía de Java (JCE) es un marco integrado en la JVM para permitir a los desarrolladores utilizar la criptografía de forma fácil y segura en sus programas. Para ello, proporciona una interfaz simple y portátil a los programadores, mientras utiliza un sistema de proveedores JCE para implementar de forma segura las operaciones criptográficas subyacentes.

Claves y gestión de claves

Si bien la JCE asegura las operaciones criptográficas y la generación de claves, es responsabilidad del desarrollador administrar realmente sus claves. Más información debe ser proporcionada aquí.

Una de las mejores prácticas comúnmente aceptadas para manejar claves en tiempo de ejecución es almacenarlas solo como matrices de byte , y nunca como cadenas. Esto se debe a que las cadenas Java son inmutables y no se pueden "borrar" o "borrar a cero" manualmente en la memoria; mientras que una referencia a una cadena puede ser eliminada, la cadena exacta permanecerá en la memoria hasta que su segmento de memoria sea recolectado y reutilizado. Un atacante tendría una ventana grande en la que podría volcar la memoria del programa y encontrar fácilmente la clave. Por el contrario, las matrices de byte son mutables y sus contenidos pueden sobrescribirse en su lugar; es una buena idea 'poner a cero' sus llaves tan pronto como ya no las necesite.

Vulnerabilidades comunes de Java

Contenido necesita

Preocupaciones de redes

Contenido necesita

Aleatoriedad y tu

Contenido necesita

Para la mayoría de las aplicaciones, la clase java.utils.Random es una fuente perfectamente fina de datos "aleatorios". Si necesita elegir un elemento aleatorio de una matriz, o generar una cadena aleatoria, o crear un identificador "único" temporal, probablemente debería usar Random .

Sin embargo, muchos sistemas criptográficos dependen de la aleatoriedad para su seguridad, y la aleatoriedad proporcionada por Random simplemente no es de la calidad suficiente. Para cualquier operación criptográfica que requiera una entrada aleatoria, debe usar SecureRandom en SecureRandom lugar.

Hashing y Validación

Se necesita más información.

Una función hash criptográfica es un miembro de una clase de funciones con tres propiedades vitales; Consistencia, singularidad e irreversibilidad.

Consistencia: dados los mismos datos, una función hash siempre devolverá el mismo valor. Es decir, si X = Y, f (x) siempre será igual a f (y) para la función hash f.

Unicidad: no hay dos entradas para una función hash que resultarán en la misma salida. Es decir, si X! = Y, f (x)! = F (y), para cualquier valor de X e Y.

Irreversibilidad: es imprácticamente difícil, si no imposible, "revertir" una función hash. Es decir, dado solo f (X), no debería haber manera de encontrar la X original antes de poner todos los valores posibles de X a través de la función f (fuerza bruta). No debería haber una función f1 tal que f1 (f (X)) = X.

Muchas funciones carecen de al menos uno de estos atributos. Por ejemplo, se sabe que MD5 y SHA1 tienen colisiones, es decir, dos entradas que tienen la misma salida, por lo que carecen de singularidad. Algunas funciones que actualmente se consideran seguras son SHA-256 y SHA-512.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow