Hola a todos, acabo de crear una funcion hash en as3, y que es una funcion hash, pues una función hash H es una función computable mediante un algoritmo,
H: U → M
x → h(x),
que tiene como entrada un conjunto de elementos, que suelen ser cadenas, y los convierte (mapea) 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.
Esta especialmente es una funcion hash de rango variable y con clave creada por mi a la que he titulado cryptalab. Pero para que sirven las funciones hash bien pues son utilizadas para:
Construcción de estructuras de datos: Su uso en distintas estructuras de datos hacen más eficientes las búsquedas. Ej. tablas hash.
Construcción de esquemas de compromiso. Los esquemas de compromiso permiten que una entidad elija una valor entre un conjunto finito de posibilidades de tal forma que no pueda cambiarla. Esa entidad no tiene que revelar su elección hasta si acaso el momento final (la elección puede permanecer oculta).
Construcción de algoritmos de cifrado/descifrado. Por ejemplo se usa en la construcción de cifradores de flujo y de cifradores de bloque.
Construcción de algoritmos generadores de números pseudoaleatorios.
Construcción de cadenas pseudoaleatorias. Por ejemplo el llamado modelo de oráculo aleatorio se basa en considerar que funciones hash con ciertas propiedades se comportan como funciones que escogen cadenas al azar, se usa para el estudio de la seguridad los esquemas criptográficos.
Construcción de algoritmos de testeo de pertenencia o no a un conjunto.- Se han usado funciones hash para la construcción de acumuladores criptográficos y filtros de Bloom. Estas tecnologías permiten establecer mecanismos que permiten pronunciarse, a veces con cierto grado de error, sobre la pertenencia o no a cierto conjunto.
Construcción de métodos de generación de sellos de tiempo confiables.
Herramienta para proteger la integridad
En la firma digital
Como dato que se firma:En los algoritmos de firma convencionales normalmente en lugar de firmar todo el contenido se suele ser firmar sólo el valor hash del mismo. Algunas de las motivaciones para hacer esto son:32
Cuando se usa para firmar algoritmos de firma por bloques donde los mensajes son más largos que el bloque, no es seguro firmar mensajes bloque a bloque ya que un enigo podría borrar bloques del mensaje firmado o insertar bloques de su elección en el mensaje antes de que sea firmado. Al usar una función hash hacemos una transformación que hace a la firma dependiente de todas las partes del mensaje.
Normalmente los valores hash son mucho más cortos que los datos originales de entrada. Se puede mejorar mucho la velocidad de firma firmando el valor hash en lugar de firmar el dato original.
Si los mensajes a firmar pueden tener cierta estructura algebraica y el algoritmo de firma se comporta de forma que el sistema resultante puede ser vulnerable a criptoanálisis con ataques de texto escogido, podemos usar funciones hash para destruir esta estructura algebraica.
Como parte del algoritmo de firma: Se han desarrollado algoritmos de firma que usan funciones hash en el propio algoritmo de firma como una herramienta interna del mismo. Ejemplo de este tipo algoritmos son el esquema de firma de Merkle.
Suma de verificación (del inglés checksum): Cuando queremos almacenar o transmitir información, para protegernos frente a errores fortuitos en el almacenamiento o transmisión, es útil acompañar a los datos de valores hash obtenidos a partir de ellos aplicando funciones hash con ciertas propiedades de forma que puedan ser usados para verificar hasta cierto punto el propio dato. A el valor hash se le llama Suma de verificación.
Prueba de la integridad de contenidos.- Por ejemplo cuando se distribuye un contenido por la red, y se quiere estar seguro de que lo que le llega al receptor es lo que se está emitiendo, se proporciona un valor hash del contenido de forma que ese valor tiene que obtenerse al aplicar la función hash sobre el contenido distribuido asegurando así la integridad. A esto se le suele llamar checksum criptográfico debido a que es un checksum que requiere el uso de funciones hash criptográficas para que sea difícil generar otros ficheros falso que tengan el mismo valor hash. Otro ejemplo de uso esta tecnología para verificar la integridad es calcular y guardar el valor hash de archivos para poder verificar posteriormente que nadie (Ej un virus) los ha modificado. Si en lugar de verificar la integridad de un solo contenido lo que se quiere es verificar la integridad de un conjunto de elementos, se pueden usar algoritmos basados en funciones hash como los árboles de Merkle que se basan en aplicar reiteradamente las funciones hash sobre los elementos del conjunto y sobre los valores hash resultantes.
Herramientas vinculadas a la autenticación y control de acceso
Autenticación de entidades: Por ejemplo es frecuente el uso para este propósito de funciones hash deterministas con clave secreta que tienen ciertas propiedades (Códigos de autenticación de mensajes). En estos esquemas tanto el servicio de autenticación, o verificador, como la entidad que se quiere autenticar mantienen en secreto la clave de la función hash. El esquema funciona de la siguiente forma: El que se quiere autenticar genera un mensaje y calcula su valor hash. Estos dos datos se mandan al verificador. El verificador comprueba que el valor hash se corresponde con el mensaje enviado y de esta forma verifica que la entidad tiene la clave secreta y por otra parte puede asegurar que el mensaje es íntegro (no ha sido modificado desde que se calculó el valor hash). Observar que el esquema no tiene la propiedad del no-repudio por parte del que se quiere autenticar ya que el verificador, al disponer de la clave secreta, puede generar también los valores hash.
Protección de claves: Para comprobar la corrección de una clave no es necesario tener la clave almacenada, lo que puede ser aprovechado para que alguien no autorizado acceda a ella, sino almacenar el valor hash resultante de aplciar una función hash determinista. De esta forma para verificar si una clave es correcta basta con aplicar la función hash y verificar si el resultado coincide con el que tenemos almacenado.
Derivación de claves: Por ejemplo en algunas aplicaciones usan funciones hash para derivar una clave de sesión a partir de un número de transacción y una clave maestra. Otro ejemplo de aplicación sería el uso de funciones hash para conseguir sistemas de autenticación con claves de un solo uso o OTP (del inglés One Time Password). En este tipo de sistemas la clave es válida para un solo uso. Estos sistemas están basados se basan en tener un semilla inicial y luego ir generando claves (mediante un algoritmo que puede usar funciones hash) que pueden tener un solo uso y así evitar ataques de REPLAY.
Herramienta para la identificación y la rápida comparación de datos: Se pueden usar funciones hash para proporcionar una identificación de objetos o situaciones. Una buena función hash para este propósito debería ser rápida y asegurarse de que dos objetos o situaciones que se considerar iguales den lugar al mismo valor hash. Observar que dos objetos o situaciones pueden ser considerados iguales sin ser idénticos. Por ejemplo podemos considerar iguales a dos ficheros que son distintos bit a bit porque realmente son la digitalización de la misma película. Es labor del diseño de la función hash capturar la esencia del criterio de igualdad. Por otra parte la evaluación de la función hash debería ser poco costosa para facilitar la rápida comparación de elementos candidatos a ser iguales y de esta forma poder implementar algoritmos de búsqueda rápidos.
Huellas digitales.- El uso de funciones hash aplicados a cadenas permiten obtener valores hash que pueden usarse detectar fácilmente la aparición de esos datos en distintos sitios. Pueden ser usados para distintos usos como búsqueda de virus, autenticación con datos biométricos, detección de copias,...La idea puede usarse más allá de textos y ser aplicado a cualquier tipo de contenido multimedia:33 34 Las funciones hash específicamente diseñadas para este propósito obtienen valores hash que permiten detectar características intrínsecas del contenido multimedia, de forma que se pueda identificar si dos archivos diferentes se corresponden con el mismo contenido multimedia. Como aplicación práctica de este tipo de algoritmo tenemos los programas que se ejecutan en dispositivos móviles y que son capaces de adivinar el título de la canción que está sonando en la habitación solamente capturando el sonido y comparándolo con estos valores hash. Este tipo de algoritmos también se puede utilizar para protección de contenidos multimedia ya que permite validar automáticamente si cierto fichero multimedia está protegido o no por derechos de autor.
Identificación de contenidos: En algunas aplicaciones se usa el valor hash de un contenido multimedia para identificar ese contenido independientemente de su nombre o ubicación. Esto es ampliamente usado en redes Peer-to-peer que intercambian de archivos, tales como Kazaa, Ares Galaxy, Overnet, BitTorrent.
Identificar un registro en una base de datos y permitir con ello un acceso más rápido a los registros (incluso más rápido que teniendo índices).
Algorítmos de búsqueda de subcadenas: Los algoritmos de búsqueda de subcadenas tratan el problema de buscar subcadenas, a la que llaman patrón, dentro de otra cadena a la que llaman texto. Hay algoritmos de este tipo que usan funciones hash en su implementación. Ejemplo: algoritmo Karp-Rabin.
Detección de virus: Para detectar los virus muchos antivirus definen funciones hash que capturan la esencia del virus y que permiten distinguirlos de otros programas o virus. Es lo que se llama firma del virus. Estas firmas son usadas por los antivirus para poder detectarlos.
Muchas de las aplicaciones de las funciones hash son relativas al campo de la criptografía ( Cifradores, acumuladores criptográficos, firma digital, protocolos criptográficos de autenticación,...). La Criptografía es una rama de las matemáticas que proporciona herramientas para conseguir seguridad en los sistemas de información. Las funciones hash interesantes en el área de la criptografía se caracterizan por cumplir una serie de propiedades que permiten a las utilidades criptográficas que las utilizan ser resistente frente ataques que intentan vulnerar la seguridad del sistema. A las funciones hash que cumplen estas propiedades se las llama funciones hash criptográficas.
Como funciona la funcion hash cryptalab-->
Código :
package clases{
public dynamic class crl{
//cryptalab created by aukun
public dynamic function crl(_str010:String,_v:uint,_str011:String='visitar cristalab es una buena forma para aprender'){
var str011:String=_str011;
var str01:String=str011 + _str010;
var n1=str01.length;
var ar01:Array=new Array();
ar01=['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];
this['str02']='';
var n2:uint=0;
for(var v:uint=0;v<n1;v++){n2=n2+(v*(str01.charCodeAt(v)));}
var n3:String=n2.toString(10);var n4:uint=n3.length;
var k:uint=0;
var f:uint=0;
for(var t:uint=0;t<_v;t++){
var d:uint=str01.charCodeAt(f);
var e:uint=uint(n3.charAt(k));
if(k>n4){k=0;}else{}
if(f>n1){f=0;}else{}
if(d>90){d=d+1;}else{}
var r1=((e+d+t+f+k+n2)-((e+d+t+f+k+n2)%16))/16;
var r:uint=(e+d+t+f+k+n2+r1)%16;
this['str02']=this['str02'] + ar01[r];
k++;f++;
}
}
public dynamic function cr2():String{
return this['str02'];
}
}
}
esta seria la clase de criptalab
Esta funcion tiene dos variables obligatorias,
_str010:String --> es el string apartir del cual le queremos pasar la funcion hash
_v:uint--> es la cantidad de bytes de la cadena hash
por ejemplo queremos hacer des string-->'cristalab' una cadena hash de 64 con lo
que obtendriamos por ejemplo a5c28d6f471ab9710fff058139d31e80acc681f5b610bc5187a30d6981a6dd40
ademas podemos modificar la dispersion modificando la variable opcional
_str011:String='visitar cristalab es una buena forma para aprender'
cuanto mas longitud tenga esta cadena mas dispersion y mas dificil de desencriptar.
ademas podemos hacer que sea codigo binario, octal, hexagesimal, code36, code64 o freecode solo tenemos que variar el array ar01. Porque es necesario crear una funcion hash propia , pues porque necesito que sea una funcion que pueda ser utilizada por cualquiera y diferente para cada usuario (por eso solo hace falta variar cada uno _str011:String, cualquiera puede tener su propia funcion hash crear ese algoritmo ya sea en php, python, c++, as3.. vaya cualquier lenguaje.