viernes, 23 de marzo de 2012

ENCRIPTACION

       La encriptación es el proceso para volver ilegible información considera importante. La información una vez encriptada sólo puede leerse aplicándole una clave.


      Se trata de una medida de seguridad que es usada para almacenar o transferir información delicada que no debería ser accesible a terceros. Pueden ser contraseñas, nros. de tarjetas de crédito, conversaciones privadas, etc.

      Para encriptar información se utilizan complejas fórmulas matemáticas y para desencriptar, se debe usar una clave como parámetro para esas fórmulas.

      El texto plano que está encriptado o cifrado se llama criptograma.

      Encriptación de dos sentidos: La encriptación de dos sentidos, es un tipo de encriptación en el que se puede encriptar y desencriptar una cadena. Es decir, una cadena como “Copstone” se puede convertir en “2IYa0gFAiGI=” si utilizamos la clave secreta “casa” y también se puede realizar el proceso inverso, es decir si tenemos la cadena “2IYa0gFAiGI=” y la palabra secreta “casa” podemos obtener la palabra “Copstone”.

      Esta forma de encriptación, a pesar de ser bastante segura, sigue siendo vulnerable debido a que siempre existe una forma de regresar a la cadena original. Me explico: Supongamos que en tu servidor guardas las contraseñas de tus usuarios. Como eres precavido, las claves las guardas encriptadas. Además en tu servidor en un lugar seguro tienes escrita tu clave secreta.

      Ahora supongamos que alguien se mete a tu servidor y obtiene estos dos datos: la contraseña encriptada “2IYa0gFAiGI=” y la clave secreta “casa”. Con estos dos datos se puede saber que la contraseña es “Copstone”, lo único que hay que hacer es adivinar el algoritmo utilizado para encriptar (en realidad hay varios pero no tantos como para que esto sea difícil).

          Encriptación de un sentido: La encriptación de un sentido o encriptación asimétrica, es un tipo de encriptación en el que solo se puede encriptar una cadena y el proceso inverso es casi imposible. Es decir, una cadena como “Copstone” se puede convertir en “6298ed5652f7dff6fd72af530f036f31″ usando “casa” como clave secreta y no hay forma de regresar a la cadena original.

          Esta forma de encriptación es la mas segura por el mismo hecho de que no se puede regresar a la cadena original. Me explico: Supongamos que en tu servidor guardas las contraseñas de tus usuarios. Como eres precavido, las claves las guardas encriptadas. Además en tu servidor en un lugar seguro tienes escrita tu clave secreta. Ahora supongamos que alguien se mete a tu servidor y obtiene estos dos datos: la contraseña encriptada “6298ed5652f7dff6fd72af530f036f31″ y la clave secreta “casa”. Como no hay forma de regresar a la cadena original utilizando estos dos valores, es practicamente imposible que se obtenga la contraseña. La única forma de adivinar la clave sería probar una cadena que al aplicarle el algoritmo de encriptación con la palabra secreta “casa” se obtenga la contraseña encriptada. Como te puedes dar cuenta esto es casi lo mismo que adivinar la clave desde cero.

      La pregunta es: ¿Si no puedo regresar a la cadena original como sabes el valor de la cadena original? La respuesta es sencilla. No puedes saberlo. La idea de este tipo de encriptación es comparar las dos claves encriptadas para ser iguales. Por ejemplo, si una persona tiene la palabra “Copstone” que al aplicarle la encriptación con la palabra “casa” obtiene el valor “6298ed5652f7dff6fd72af530f036f31″, lo que tenemos que hacer es obtener la palabra “Copstone” y encriptarla usando la palabra “casa” y comparar este resultado con el valor recibido.

    Para encriptar utilizaremos la función mcrypt_encrypt y para desencriptar la función mcrypt_decrypt. Ambas funciones reciben los siguiente parámetros:
Parámetro Descripcióncifrado Define el algoritmo de encriptación que se utilizará. Existe una amplia variedad como por ejemplo MCRYPT_3DES, MCRYPT_RIJNDAEL_256, MCRYPT_SERPENT_256. Si quieres una lista completa puedes encontrarla aquí.clave secreta Esta es la clave secreta que se utilizará para realizar la encriptación.datos El valor que se desea encriptar o desencriptar.modo El modo de encriptación a emplear. Puede ser MCRYPT_MODE_ seguido por ECB, CDC,CFB, OFB, NOFB o STREAM.vector inicialización Este es un vector que necesitan los algoritmos para poder operar. Si no especificas un vector de inicialización entonces el cirfado es más vulnerable porque se crea un vector lleno de 0’s. Este vector podrías considerarlo como una segunda clave secreta.
Para crear un vector de inicialización puedes utilizar el comando:
mcrypt_create_iv(mcrypt_get_iv_size($cifrado, $modo), MCRYPT_RAND)

                                     

No hay comentarios:

Publicar un comentario