Qué es la criptografía en Java && para qué sirve?

1

Qué es la criptografía? para qué sirve?

La criptografia es la tecnica que protege documentos y datos.Funciona a traves de la utilizacion de cifras o codigos para escribir algo secreto en documentos y datos confidenciales que circulas en las redes locales o hasta incluso en internet .

Su utilizacion es tan antigua como la escritura para que os deis cuenta los romanos usaban codigos para ocultar sus proyectos de guerra de aquellos que no debianconocerlos, con el fin de que solo las personas que cononian el significado de estos codigos descifraran ese mensaje oculto.

A lo largo de los tiempos el avance de la informatica y ordenadores , la criptografia fue amplia divulgada , empleada y modificada , luego se constituyo con algotrismos matematicos.

Ademas de mantener la seguridad del usuario la criptografia integra la web , la autotincidad del usuario como tambien la del remitente , el destinatario y de la actualidad del mensaje o del acceso.

Las llaves con las que utilizar la criptografia son 2 :

  1. Simetricas: Es la utilizacion de algoritmos para poder descifrar y encriptar o ocultar documentos.Son como grupos de algoritmos que se relacionan unos con los otros para poder mantener la conexión confidencial de la informacion.
  2. Asimetrica : Es una fórmula matemática que utiliza dos llaves, una pública y la otra privada. La llave pública es aquella a la que cualquier persona puede tener acceso, mientras que la llave privada es aquella que sólo la persona que la recibe es capaz de descifrar. 

Para mas informacion aquí os dejo un video muy chulo :

Os voy a explicar un claro ejemplo de cifrado que Julio Cesar llevo acabo fijaos:

El cifrado César y otros cifrados de sustitución monoalfabeto

Cifrado César

El cifrado César es uno de los primeros métodos de cifrado conocidos históricamente. Julio César lo usó para enviar órdenes a sus generales en los campos de batalla. Consistía en escribir el mensaje con un alfabeto que estaba formado por las letras del alfabeto latino normal desplazadas tres posiciones a la derecha. Con nuestro alfabeto el sistema quedaría así:

Alfabeto en claro: A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z
Alfabeto cifrado: D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z A B C

Por ejemplo, si se quiere enviar el mensaje ATACARALAMANECER, lo que se escribirá realmente es DWDFDUDÑDODPHFHU

El receptor del mensaje conocía la clave secreta de éste (es decir, que estaba escrito con un alfabeto desplazado tres posiciones a la derecha), y podía descifrarlo fácilmente haciendo el desplazamiento inverso con cada letra del mensaje. Pero para el resto de la gente que pudiese accidentalmente llegar a ver el mensaje, el texto carecía de ningún sentido.

Aparentemente es un cifrado muy débil y poco seguro, pero en la época de Julio César no era de conocimiento general la idea de ocultar el significado de un texto mediante cifrado. De hecho, que un mensaje estuviese por escrito ya era un modo de asegurar la confidencialidad frente a la mayoría de la población analfabeta de la época.

Como dato curioso, más de 1500 años después, un cifrado similar al de César fue utilizado por la reina María Estuardo de Escocia, para conspirar junto con los españoles contra su prima Isabel I (en realidad, fue incitada a conspirar por agentes al servicio de Isabel I; una trampa bien urdida.) Los mensajes cifrados de María fueron fácilmente descifrados mediante sencillos análisis estadísticos por los agentes de Isabel I, y así pues quedó al descubierto la conspiración de la reina escocesa. Junto con la pérdida del secreto de la comunicación, María perdió la cabeza en su ejecución el 8 de febrero de 1587. Después de esto el cifrado César quedó definitivamente descartado como método de cifrado seguro para los gobernantes del mundo. Desde entonces a hoy, los cifrados usados por los estados para preservar sus secretos han mejorado considerablemente.

Lo que a nosotros nos interesa del cifrado César es que es un claro ejemplo de utilización de la aritmética modular para garantizar la confidencialidad de la información mediante el cifrado o encriptación. Matemáticamente, podemos describir el método usado por Julio César como una función lineal del tipo

E(x)=x+3 (mod 27)

para un alfabeto con 27 caracteres como el español. La x indica la posición que la letra “en claro” ocupa en alfabeto. E(x) indica la posición de la letra cifrada correspondiente a x en el alfabeto. Según esto, E(0)=3, y E(26)=2 (esto es, la a se cifra como d, y la z como c)

Para descifrar se emplea la función D(x)=x-3 (mod 27) Para cifrar y descifrar el mensaje los comunicantes han de conocer y usar una misma clave secreta, que en este caso es el desplazamiento aplicado sobre el alfabeto (desplazamiento=3). Por eso el cifrado César pertenece a los cifrados de clave privada, también llamados cifrados simétricos.

Cifrados por sustitución monoalfabeto

Una sustitución monoalfabeto como la del cifrado César puede expresarse mediante una transformación congruente lineal (también conocida criptográficamente como transformación afín). En el cifrado César esta se escribiría como E(M)= (M+3) mod N, siendo N la longitud o cardinal del alfabeto original.

Puede extenderse la transformación afín a un caso más general con la siguiente congruencia lineal:

E(a,b) (M) = (aM + b) mod N

siendo M el valor numérico de un carácter del alfabeto original, a y b dos números enteros menores que el cardinal N del alfabeto, y cumpliendo que a y N sean primos entre sí, esto es, que mcd(a,N) = 1, ya que de no ser así diferentes letras del alfabeto original darían lugar a una misma letra en el alfabeto cifrado equivalente. La clave de cifrado k viene entonces dada por el par (a,b).

a es una constante que determina el intervalo de separación entre dos letras del alfabeto cifrado cuando estas son consecutivas en el alfabeto original. Esta constante se denomina coeficiente o factor de decimaciónb es una constante que determina el desplazamiento entre las letras del mensaje claro y las correspondientes en el cifrado.

El cifrado César sería pues una transformación afín con una clave k = (1,3).

Aqui os dejo el codigo den Java :

2

3

Ahora os voy a explicar conceptos de clave pública y privada.

Cifrado de clave privada

El cifrado de clave privada o cifrado simétrico se basa en que una clave puede cifrar y descifrar la información. La ventaja es que el proceso es muy rápido y una sola tecla se utiliza para ambos extremos de la cadena de cifrado. La preocupación es la protección de la clave como un punto único de fallo para la seguridad. La gestión de claves es la principal preocupación cuando se utiliza el cifrado de clave privada.

Cifrado de clave pública

El cifrado de clave pública, o cifrado asimétrico, es una solución al problema percibido de gestión de claves que se encuentra en el cifrado de clave privada. Hay un par de claves utilizadas, una clave pública y privada. La clave pública se distribuye ampliamente a cualquiera que quiera comunicarse en privado con la otra parte. Esa parte tiene la clave privada, que está asociada a la clave pública. Si bien la clave pública está ampliamente disponible, la clave privada nunca será compartida. A pesar de que el cifrado con clave pública tiene que lidiar con la gestión de claves en cifrado privado, suele ser más lento que el cifrado con clave privada. Esto es debido al hecho de que hay sobrecarga adicional con varias claves que necesitan ser administradas.

Ejemplos de cifrado privado y público

DES o Data Encryption Standard, es un ejemplo de un esquema de cifrado actual. En la mayoría de las aplicaciones, especialmente en las transacciones comerciales a través de la web, el cifrado de clave pública es algo común. Cuando vas a Amazon.com para hacer una compra, estás usando lo que se denomina SSL, o Secure Sockets Layer, que es el cifrado de la sesión entre tú y Amazon. Este proceso utiliza el cifrado de clave pública. Adicionalmente, hay enfoques híbridos para el cifrado. Un ejemplo popular de esto es el uso de PGP o Pretty Good Privacy, que utiliza una combinación de claves privadas y el cifrado de clave pública.

 

Funciones hash criptográficas

Que es un Hash?

Una función hash es un algoritmo matemático que nos da un resultado B al aplicarlo a un valor inicial A. Es como cualquier función matemática, por ejemplo la función raiz cuadrada nos daría como resultado 2 si se la aplicamos al número 4. E igual que cualquie función matemática tiene que actuar de tal forma y tiene que cumplir con ciertos criterios. No nos puede devolver cualquier cosa, lo que nos devuelva requiere que tenga ciertas propiedades para que podamos usarlo.

Las propiedades que deben de tener las primitivas hash son:

1. Resistencia a la preimagen: One Way Hash Function. Como hemos dicho antes, significa que dada cualquier imagen, es computacionalmente imposible encontrar un mensaje x tal que h(x)=y. Otra forma como se conoce esta propiedad es que h sea de un solo sentido. 

2. Resistencia a 2° preimagen: OWHF: Weak One Way Hash Function. Significa que dado x, es computacionalmente imposible encontrar una x’ tal que h(x)=h(x’). Otra forma de conocer esta propiedad es que h sea resistente a una colisión suave. 

3. Resistencia a colisión: CRHF: Strong One Way Hash Function. Significa que es computacionalmente imposible encontrar dos diferentes mensajes x, x’ tal que h(x)=h(x’). Esta propiedad también se conoce como resistencia a colisión fuerte. 

Algoritmo MD5

Ataque de Cumpleaños.

Ataque Wang-Yin-Yu o Ataque chino

Ataque Multicolision de Joux-Wang.

“La historia de Alicia y su jefe”

Tecnicas de Programacion Segura

Considerando los metodos de programación segura se definen los siguientes principios:

  Menor Privilegio
Este principio establece que un sujeto sólo debe dar a un objeto los privilegios que necesita para completar sus tareas asignadas.

 Economía y simplificación de mecanismos de seguridad
Este principio establece que los mecanismos de seguridad que se establezcan deben ser tan sencillos como sea posible.

 Configuraciones por defecto seguras
Este principio comenta que a menos que un sujeto haya otorgado acceso explícito a un objeto, éste no debería tenerlo. Es decir, todo lo que no está estrictamente permitido es prohibido.

Fallos épicos relacionados con la criptografía

Olvida y entierra la tentación de cifrar la base de datos con una única contraseña y almacenar dentro las contraseñas en claro. No, ese esquema no es seguro, delegas toda la seguridad en una única contraseña que resulta fácil de obtener (por ejemplo revisando el código del programa que cargue esa base de datos). Nunca utilices criptografía reversible para guardar contraseñas

Emplea técnicas de ‘salting’ a la hora de almacenar el hash de la contraseña. Usar salt significa que, si la contraseña es 123456, en vez de guardar la representación de 123456 en su forma ‘hasheada’ lo que haces es introducir otro elemento que impida a un atacante usar un listado de hashes de contraseñas ya precompilado. Es decir, lo que guardas es salt+123456 que obviamente genera un hash diferente a 123456 (y que un atacante podría tener ya hasheado con lo que se ahorra el proceso criptográfico). En un típico esquema de usuario / contraseña para una aplicación web, es ideal usar el correo electrónico como salt ya que es un dato conocido y accesible (normalmente se envían correos de confirmación de altas) de forma que, en el ejemplo antes descrito, al final el hash se haría contra fulano@mengano.com+123456

Conclusión Personal

Mi conclusion personal es que es muy importante el uso de funciones en java para poder encriptar claves asi como el buen uso a la hora de programar formularios y codigo.

El tema de inyeccion de codigo es muy importante para la seguridad de datos tuyos y de tus futuros clientes ya que en la red hoy dia todos estamos vendidos.

Bibliografias:

http://www.dma.fi.upm.es/java/matematicadiscreta/aritmeticamodular/cesar.html

http://www.ehowenespanol.com/explicacion-encriptacion-claves-publicas-privadas-sobre_119274/

http://foro.elhacker.net/criptografia/funciones_de_hash-t100025.0.html

http://osoriorosa.jimdo.com/seguridad-temas/metodologias-de-programacion-segura/

http://www.securitybydefault.com/2013/09/consejos-practicos-la-hora-de-integrar.html

Anuncios

Publicado el 3 febrero, 2015 en Programacion de Servicios. Añade a favoritos el enlace permanente. Comentarios desactivados en Qué es la criptografía en Java && para qué sirve?.

Los comentarios están cerrados.

A %d blogueros les gusta esto: