Todo lo que necesita saber sobre el cifrado en Java



Este artículo le proporcionará un conocimiento detallado y completo del cifrado en Java y cómo usarlo con ejemplos.

El cifrado es el método de utilizar algoritmos matemáticos para camuflar el significado de una información de modo que solo las partes autorizadas puedan descifrarla. En este artículo, analizaremos el cifrado y el descifrado en en el siguiente orden:

Introducción al cifrado en Java

El cifrado se implementa para proteger nuestros datos (como textos, conversaciones y voz), ya sea en una computadora o se envía a través de Internet. Las tecnologías de cifrado recientes son elementos esenciales de cualquier entorno informático seguro.





servicenow tutorial para principiantes pdf

El papel principal de la seguridad del cifrado radica en la capacidad de un algoritmo para generar texto cifrado (texto cifrado) que es difícil de volver a su texto plano original. El uso de claves también crea otro nivel de seguridad para los métodos de proteger nuestra información. Una clave es cierta información, que permite que solo aquellos que la tienen codifiquen y descodifiquen un mensaje.

Cifrado y descifrado en Java



Algoritmos de cifrado simétrico

Los algoritmos simétricos utilizan la misma clave para el cifrado y el descifrado. Dichos algoritmos solo pueden operar en modo de bloque (que funciona con bloques de datos de tamaño fijo) o en modo de flujo (que funciona con bits o bytes de datos). Tales algoritmostambién se utilizan comúnmente para aplicaciones como cifrado de datos, cifrado de archivos y cifrado de datos transmitidos en redes de comunicación (como TLS, correos electrónicos, mensajes instantáneos, etc.)

Algoritmos de cifrado asimétricos (o de clave pública)

A diferencia de los algoritmos simétricos, que utilizan la misma clave para las operaciones de cifrado y descifrado, los algoritmos asimétricos utilizan dos claves idénticas para estos dos pasos. Estos algoritmos se utilizan para calcular firmas digitales y protocolos de establecimiento de claves. Sin embargo, esto también presenta el desafío de que se deben usar dos claves, lo que hace que las cosas sean más complejas.



Para configurar cualquier esquema de cifrado básico de forma segura, es muy importante que todos estos parámetros (como mínimo) estén diseñados correctamente:

  • Es importante elegir el algoritmo correcto.
  • Elegir el modo de funcionamiento adecuado para la tarea adecuada
  • Elegir el esquema de relleno correcto según el requisito
  • Elegir las teclas adecuadas y sus tamaños en consecuencia
  • Inicialización correcta con CSPRING criptográficamente seguro.

Es muy importante estar al tanto de configurar todos estos parámetros de forma segura. Incluso una pequeña configuración incorrecta puede poner en peligro todo un sistema de cifrado y abrirlo a ataques de piratas informáticos y otro malware. Por lo tanto, para mantener esta discusión simple, analicemos solo las inicializaciones independientes del algoritmo de un cifrado. En lugar de realizar estas encriptaciones usted mismo, siempre es mejor dejar que los expertos hagan su trabajo de configurar más configuraciones dependientes del algoritmo, como los valores pyq del algoritmo RSA, etc. docena, se utilizan clases.

La introducción de jerarquías de clases, muchos constructores / métodos sobrecargados, etc., agrega muchas complejidades que lo hacen innecesario. Ojalá Java no complicara las configuraciones básicas y simplemente empleara una arquitectura más simplificada como la de Microsoft, donde todos esos parámetros están dentro del perímetro de una sola clase SymmetricAlgorithm y AsymmetricAlgorithm. Para que se especifiquen los primeros tres parámetros (algoritmo, modo de operación y esquema de relleno), un objeto Cipher utiliza una cadena de transformación.

  • Elegir el algoritmo correcto

Sin duda, una cadena de transformación incluye el nombre de un algoritmo criptográfico. Entre el cifrado simétrico y asimétrico, hay 11 algoritmos (sin tener en cuenta varias combinaciones PBEWithAnd), que se pueden especificar según la Documentación de nombres de algoritmos estándar. De ellos, solo dos (uno para cada cifrado simétrico y asimétrico) están realmente completamente protegidos.

Los algoritmos restantes están excesivamente rotos (DES, RC2, etc.) o han comenzado a surgir grietas (RC5), lo que lo hace rompible con suficiente potencia de CPU; ya puede estar roto cuando lea esto. Un desarrollador preocupado por la seguridad no puede leer los tesoros de las especificaciones del NIST, ni seguir los últimos acontecimientos e investigaciones en la comunidad de criptografía. Podrían captar los algoritmos rotos o riesgosos, digerir o generador pseudoaleatorio.

Siempre para:

  1. Algoritmo simétrico: se utiliza el cifrado de bloque AES / AESWrap.

  2. Algoritmo asimétrico: se utiliza RSA.

  • Modo de operación

El modo de operación es parte de la transformación y solo es relevante para los cifrados en bloque. Cuando usamos cifrados asimétricos, usamos ECB como modo de operación, que esencialmente es un truco detrás de escena, lo que significa ignorar este valor. Los proveedores de Java como SunJCE, SunPKCS11 tienen por defecto el modo ECB para algoritmos simétricos y asimétricos. Puede ser algo bueno para los algoritmos asimétricos, pero una mala idea para los cifrados en bloque.

Se podría indicar a los proveedores que establezcan valores predeterminados seguros en función del algoritmo utilizado. Utilice el cifrado simétrico para evitar ataques de reproducción o ataques de texto sin formato conocido. Además, use una transformación, que especifique completamente un algoritmo (es decir, con su modo de operación y relleno). Nunca, nunca hagas algo como lo que se menciona a continuación.

Como se indicó anteriormente, el algoritmo AES se utilizaría con el modo de operación ECB, haciendo que los ataques de repetición sean muy fáciles. Para un nuevo desarrollo, si existe la más mínima posibilidad de renovar el trabajo antiguo, debemos usar el modo de cifrado autenticado con datos asociados (AEAD) (por ejemplo, GCM y CCM). Tenemos una etiqueta de autenticación con una longitud total de 128 bits. Si usamos un modo no autenticado usamos CBC o CTR con una MAC para autenticar el texto cifrado.

  • Elegir el esquema de relleno adecuado

Los modos de cifrado de bloques comunes necesitan que la longitud del texto sin formato sea un múltiplo del tamaño de bloque del algoritmo de cifrado subyacente, lo que rara vez es el caso. Por lo tanto, necesitamos algo de relleno.El programa Java nos proporciona tres esquemas diferentes de cifrado simétrico, uno es Sin relleno, que es inaceptable, y otro es ISO10126Padding que se ha retirado desde 2007).

Por lo tanto, la única opción adecuada es utilizar PKCS5Padding. La combinación de algunos modos de funcionamiento (por ejemplo, el modo CBC) y el esquema de relleno PKCS5Padding puede provocar ataques de relleno de Oracle. No mencionar un esquema de relleno es más peligroso que proporcionar un esquema que sea susceptible solo a ciertos tipos de ataques. El modo de operación AEAD es más recomendable para asegurarse de que está protegido contra estos ataques.

  • Algoritmos asimétricos

En los algoritmos asimétricos, tenemos la opción de elegir entre dos esquemas de relleno. Es importante asegurarse de que solo se utilicen esquemas OAEPWithAndPadding. En caso de un resumen, utilice SHA1 o SHA256 / 384/512. Para la función de generación de máscara (MGF), utilice el relleno MGF1 como se especifica. PKCS1Padding con RSA ha sido vulnerable a los ataques de Ciphertext [6] desde 1998.

Aquí hablamos sobre la forma correcta de utilizar una transformación en un método 'Cipher.getInstance'.

  • Cifrado simétrico

  • Cifrado asimétrico

El nivel de seguridad de cualquier esquema de cifrado es directamente proporcional al tamaño de su clave. La longitud de la clave debe ser lo suficientemente larga como para que cualquier ataque de fuerza bruta sea inviable al mismo tiempo, también debe ser lo suficientemente corta para tener en cuenta la viabilidad computacional. Además, debemos intentar considerar qué resiste aún los avances computacionales durante los próximos 30 años.

Con esto, llegamos al final del artículo Cifrado en Java. Espero que tenga una idea de cifrado y descifrado y por qué se usa en Java.

Revisar la por Edureka, una empresa de aprendizaje en línea de confianza con una red de más de 250.000 alumnos satisfechos repartidos por todo el mundo. El curso de certificación y capacitación Java J2EE y SOA de Edureka está diseñado para estudiantes y profesionales que desean ser desarrolladores de Java. El curso está diseñado para darle una ventaja en la programación de Java y capacitarlo para los conceptos básicos y avanzados de Java junto con varios marcos de Java como Hibernate y Spring.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de este blog de 'Cifrado en Java' y nos comunicaremos con usted lo antes posible.