Tarea Mecanismos de encriptación y funciones hash.

Esta fue una tarea de investigacion. Aqui dejo las capturas para la comprobacion






MÉTODOS Y TÉCNICAS DE ENCRIPTACIÓN

Gronsfeld: Este método utiliza más de un alfabeto cifrado para poner en clave el mensaje y que se cambia de uno a otro según se pasa de una letra del texto en claro a otra.
Es decir que deben tenerse un conjunto de alfabetos cifrados y una forma de hacer corresponder cada letra del texto original con uno de ellos.
Método de transposición: 
El método de transposición consiste en reordenar los elementos que forman el texto original, de modo que el criptograma resultante tiene los mismos elementos pero su nueva colocación impide que se pueda entender.

RSA: En los sistemas tradicionales de cifrado debe comunicarse una clave entre el emisor y el receptor del mensaje, el problema aquí es encontrar un canal seguro para transmitir dicha clave. Este problema viene a resolverse en los sistemas de clave pública la clave de cifrado, pues un tiempo enormemente de ordenador es necesario para encontrar una transformación de descifrado a partir de la de cifrado.

DES: desarrollado por IBM a mediados de los 70. Aunque tiene un buen diseño, su tamaño de clave de 56 bits es demasiado pequeño para los patrones de hoy.
DES (Data Encryption Standard) es un mecanismo de encriptación de datos de uso generalizado.

Hay muchas implementaciones de hardware y software de DES. Este transforma la información de texto llano en datos encriptados llamados texto cifrado mediante el uso de un algoritmo especial y valor semilla llamado clave. Si el receptor conoce la clave, podrá utilizarla para convertir el texto cifrado en los datos originales. Es un mecanismo de encriptado simétrico.

Chaffing & Winnowing: Esta técnica propuesta por Donald Rivest. Es más un intento de esquivar las restricciones a la criptografía en EE.UU. (y otros países) que una propuesta razonable debido al tamaño de los mensajes resultantes.

El término inglés “winnowing” se tomará como aventar es decir separar el grano de la paja y el término “chaffing” por el castellano empajar (cubrir o rellenar con paja). La idea básica consiste en mezclar la información real (grano) con otra de relleno (paja) de modo que sea imposible separarlas excepto para el destinatario.


BÍFIDO: El método Bífido es un cifrado fraccionario. Es decir que cada letra viene representada por una o más letras o símbolos, y donde se trabaja con estos símbolos más que con las letras mismas.


WLBYKYAAOTB: Este método altera la frecuencia de los caracteres a diferencia de lo que ocurre por ejemplo con los cifrados monos alfabéticos. Admite algunas variaciones como por ejemplo dividir la lista en 3,4,…, n partes.

Cifrado exponencial: Es un sistema basado en la exponenciación modular, debido  Pohlig y Hellman (1978). Este método es resistente al criptoanálisis.

Blowfish: Este algoritmo realiza un cifrado simple en 16 ciclos, con un tamaño de bloque de 64 bytes para un total de 448 bits. Aunque hay una fase compleja de la inicialización. El cifrado de datos es muy eficiente en los microprocesadores grandes.

Método Vigenére: El cifrado de Vigenére utiliza una clave externa para realizar las sustituciones, con lo que este mismo algoritmo puede dar diferentes criptogramas para el mismo texto claro en función de la clave que utilicemos.

Firmas digitales: Para que una firma digital sea aceptada como sustituta de una firma escrita debe ser:
v  Fácil de autentificar (reconocer) por cualquiera.
v  Producible únicamente por su autor.
v  En los cripto-sistemas de clave pública el procedimiento es:
El remitente: usa la clave privada para crear un mensaje firmado.

El receptor: Usa la clave pública del remitente para descifrar el mensaje o Guarda el mensaje firmado para usarlo en caso de disputas


















Ejemplos de los Métodos de Encriptación


Ejemplo Método de transposición:

C o m p u t a c i o n: Una transposición muy simple, y por tanto poco efectiva, podría consistir en escribir el mensaje al revés, con lo que quedaría:
N o i c a t u p m o c


Ejemplo Método Vigenére:

Texto claro: s e g u r i d a d                 Clave de cifrado: a b c
Para llevar a cabo el cifrado dividimos el texto claro en grupos de tantas letras como tenga la clave, y a continuación las hacemos corresponder con las letras de la clave de cifrado:
Texto claro: s e g u r i d a d                  Clave: a b c a b c a b c


















Funciones Hash o Digest

A las funciones resumen también se les llama funciones hash o funciones digest.
 H: U → M
 x → h(x)


Tiene como entrada un conjunto de elementos, que suelen ser cadenas, y los convierte en un rango de salida finito, normalmente cadenas de longitud fija. Es decir, la función actúa como una proyección del conjunto U sobre el conjunto M.
Observar que M puede ser un conjunto definido de enteros. En este caso podemos considerar que la longitud es fija si el conjunto es un rango de números de enteros ya que podemos considerar que la longitud fija es la del número con mayor número de cifras. Todos los números se pueden convertir al número especificado de cifras simplemente anteponiendo ceros.
Normalmente el conjunto U tiene un número elevado de elementos y M es un conjunto de cadenas con un número más o menos pequeño de símbolos. La idea básica de un valor hash es que sirva como una representación compacta de la cadena de entrada.
Por esta razón se dice que estas funciones resumen datos del conjunto dominio.

Orígenes del término

El término hash proviene, aparentemente, de la analogía con el significado estándar (en inglés) de dicha palabra en el mundo real: picar y mezclar. Donald Knuth cree que H. P. Luhn, empleado de IBM, fue el primero en utilizar el concepto en un memorándum fechado en enero de 1953. Su utilización masiva no fue hasta después de 10 años.

Propiedades

La calidad de una función resumen viene definida con base en la satisfacción de ciertas propiedades deseables en el contexto en el que se va a usar.
Bajo costo
Calcular el valor hash necesita poco costo (computacional, de memoria, etc.).
Compresión
Una función hash comprime datos si puede mapear un dominio con datos de longitud muy grande a datos con longitud más pequeña
Uniforme
Se dice que una función resumen es uniforme cuando para una clave elegida aleatoriamente es igualmente probable tener un valor resumen determinado, independientemente de cualquier otro elemento.
De rango variable
En algunas funciones resumen el rango de valores resumen puede ser diferente a lo largo del tiempo. Ejemplo: funciones hash usadas para tablas resumen que necesitan expandirse. En estos casos a la función hash se le debe pasar un parámetro que le permita saber en qué rango se mueve la ejecución para hallar el valor resumen.



 

 

 

Ejemplos de Funciones Hash

Esto nos puede servir si por ejemplo enviamos un correo electrónico y queremos estar seguros de que nadie modifica su contenido. Si cuando hemos escrito el correo, le aplicamos una función hash, producirá un resumen que adjuntaremos con el correo. Cuando éste sea recibido por los destinatarios, volverán a aplicar la misma función hash al correo y comprobarán si coincide con el resumen adjuntado por nosotros. Si coinciden, el mensaje no ha sido modificado en absoluto. Si no lo hacen, es porque el correo que les ha llegado no es exactamente igual al que nosotros hemos mandado. Sea cual sea el cambio (un carácter, unas palabras, la omisión/adición de un texto) el resumen producido variará enormemente del que había producido el original. Y igual que lo aplicamos a un correo lo podemos aplicar a cualquier tipo de documento.




A continuación, el código en Java para realizar una función hash:
function md5_to64(value, n) {
        if(typeof VarType != "undefined") {
               value = VarType.toUInt(value);
               n = VarType.toUInt(n);
        }

        var itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

        var str = "";
        while(--n >= 0) {
               str += itoa64.charAt(value & 0x3f);
               value = value >> 6;
        }

        return str;
}

function md5_crypt(key, salt) {
        if(typeof VarType != "undefined") {
               key = VarType.toStr(key);
               salt = VarType.toStr(salt);
        }

        var old_b64pad = b64pad;
        b64pad = "";
        var old_chrsz = chrsz;
        chrsz = 8;

        var magic = "$1$";

        if(salt.substr(0, magic.length) == magic) {
               salt = salt.substr(magic.length);
        }

        var i = salt.indexOf("$");
        if(i < 0 || i > 8) i = 8;
        salt = salt.substr(0, i);

        var str = key + magic + salt;
        var hash = str_md5(key + salt + key);

        for(var i = key.length; i > 0; i -= 16) {
               if(i >= 16) {
                       str += hash;
               }
               else {
                       str += hash.substr(0, i);
               }
        }

        for(var i = key.length; i != 0; i = i >> 1) {
               if((i & 1) != 0) {
                       str += String.fromCharCode(0x00);
               }
               else {
                       str += key.charAt(0);
               }
        }

        var passwd = magic + salt + "$";

        hash = str_md5(str);
        for(i = 0; i < 1000; i++) {
               str = "";
               if((i & 1) != 0) str += key;
               else str += hash;

               if(i % 3 != 0) str += salt;
               if(i % 7 != 0) str += key;

               if((i & 1) != 0) str += hash;
               else str += key;

               hash = str_md5(str);
        }

        hash += hash.charAt(5);
        var value;
        for(var i = 0; i < 5; i++) {
value = ((hash.charCodeAt(i) << 16) | (hash.charCodeAt(i + 6) << 8) | hash.charCodeAt(i + 12));
               passwd += md5_to64(value, 4);
        }
        value = hash.charCodeAt(11);
        passwd += md5_to64(value, 2);

        b64pad = old_b64pad;
        chrsz = old_chrsz;

        return passwd;
}































































































Comentarios