Unidad II _

  • View
    62

  • Download
    0

Embed Size (px)

Text of Unidad II _

  • Unidad II. Seguridad y Programacion

    Seguridad Encriptacin y Autenticacin

    Hash

    Un hash podemos definirlo como el resultado de una funcin matemtica aplicada a una

    entrada arbitraria de datos, de forma que el resultado es (idealmente) asociado nicamente a

    la entrada dada y siempre obteniendo un resultado de longitud finita y concreta para el

    mismo hash. Es decir, idealmente para los hash criptogrficos sera imposible volver a

    obtener el mismo resultado con otros datos diferentes. La idea es poder convertir la

    cantidad de datos que sea en un resultado de longitud fija (fijada por el propio hash). Veamos un ejemplo muy sencillo de esto. Imaginar uan funcin hash que realiza lo

    siguiente sobre nmeros enteros:

    Hash = numero1 + numero2 + numero3. MODULO 100

    En dicho ejemplo el hash se calculara sumando cada numero de entrada dado y se le

    realizara la operacin Mdulo 100. La operacin mdulo devuelve simplemente el resto de

    la divisin, y dado que el divisor es 100, el resto ser siempre un nmero entre 0 y 99:

    n1 = 500 n2 = 100 -> Hash = (500+100) MOD 100 = 600 MOD 100 = 0 Hash = 0 (600/100

    = 6 y resto 0)

    n1 = 1250 n2 = 25 n3 = 5460 Hash = (1250+25+5460) MOD 100 = 6735 MOD 100 = 35

    Hash = 35 (6735/100 = 67 y resto 35)

    Evidentemente esta funcin hash sera un tanto absurda desde un punto de vista

    criptogrfico, dado que sera relativamente muy facil obtener el mismo resultado con dos

    entradas de datos diferentes. Pero sirve para dejar ver ms o menos de lo que estamos

    hablando. En este caso tan solo existen 100 posible resultados, pero se puede observar que

    si modificsemos cualquier nmero este podra repercutir en un resultado completamente

    diferente. Las funciones hash hacen ms o menos esto, aunque no con una precisin de 100

    posibles valores y de una forma mucho ms eficiente, pero la idea es la misma. Pero no

    solo es til pensar en criptografa, una funcin Hash puede tener un valor muy importante

    simplemente en la deteccin de errores por ejemplo.

    Para que sirve esto? Tiene una gran utilidad en muchsimos campos. Podemos decir que

    existen tres tipos de Hash: Hash checksums, Hash CRC y Hash criptogrficos.

    CheckSum

  • Sera el ejemplo ms bsico de Hash. El concepto apareci de la necesidad de verificar de

    algn modo la integridad de la transferencia de los datos. Es decir, si estos se haban

    transmitido de forma alguna de forma errnea. Pero como podemos verificar esto?

    Podemos tratar los datos de entrada de tal forma que nos de un resultado, de modo que si el

    resultado es diferente en el destino, los datos son erroneos. Generalmente un CheckSum es

    una operacin matemtica basada en sumas. El ejemplo expuesto anteriormente sera un

    posible ejemplo de checksum. El ejemplo de checksum ms simple es el bit de paridad.

    Imaginar que sea cual sea el bloque de datos de entrada, se le computa la paridad al dato, y

    esta se le aade al dato final. El checksums en s mismo es tan solo un bit, un cero o un uno

    que corresponde a la paridad del dato inicial. Cuando los datos son recibidos por el destino,

    el destino calcula de nuevo la paridad del bloque y la compara con la paridad recibida. Si

    coincide los datos son vlidos. Evidentemente este checksum tan solo previene contra 1

    posible cambio de valor en uno de los bits transmitidos. Vamos a verlo con un ejemplo:

    Se desea transmitir la cadena Casa desde A hasta B. Imaginar que cada carcter es acompaado con un bit de paridad. Un carcter tiene un valor entre 0 y 255 segn la tabla

    ASCII, es decir, un carcter ocupa 1Byte de datos (8 bits). El carcter C equivale al cdigo ASCII x43 (43 en hexadecimal), lo que en binario equivale a 01000011:

    C -> 01000011 -> Se aplica Paridad Par por ejemplo (Hay nmero par de unos? si es asi el resultado es cero, de lo contrario es uno) -> 3 Unos, es impar, bit de paridad par = 1

    C -> 01000011 + bit de paridad -> Datos transmitidos: 010000111

    De este modo, el destino tan solo tiene que tomar los primeros 8 bits y realizar la misma

    operacin. Si el resultado coincide no hay error o no se ha podido detectar. Si no coincide

    se ha producido un error y los datos no puede tomarse como vlidos. En este caso caso, tan

    solo se podra detectar con un bit un nmero impar de errores: 1, 3, 5 dado que si se produce un nmero par de errores el bit de paridad no cambiara.

    Evidentemente existen Checksums ms eficientes, aunque todo depende del uso que se le

    haga. En cambio todos los das tratamos con este tipo de sistemas, y no hay que profundizar

    siquiera en la informtica. En la mayora de datos personales que puedan ser sensibles,

    suele existir un carcter o caracteres de control que verifican que los datos introducidos son

    vlidos. Por ejemplo la letra de nuestro DNI no es ms que un checksum, que se obtiene

    aplicando un mdulo 23 al nmero de la divisin. Al resultado (entre 0 y 22), se le asigna

    una letra ya espeificada. Por ejemplo, el Cero es la letra T, el tres es la letra A de tal forma que si damos o introducimos nuestro DNI de forma incorrecta, es posible verificarlo

    simplemente comprobando la letra proporcionada y ver si coincide con la que debera de

    ser. A este ejemplo se le suman los carcter de control de los nmeros de cuenta corriente,

    de otros datos del DNI, nmero de la seguridad social es una forma simple y efectiva de detectar con prontitud cualquier error en los datos tomados.

    Otro uso increblemente extendido es en la verificacin de datos en s mismos, no solo en la

    transferencia de estos. As por ejemplo, si se quiere disponer de algn tipo de archivo que

  • pueda tener datos relativamente sensibles como bios, firmwares, datos personales lo normal es ir aplicando checksums a determinadas partes del archivo incrustando este

    mismo en las diferentes partes del archivo. De este modo, el software a medida que va

    procesando el archivo puede ir verificando cada bloque para asegurarse de que el archivo es

    confiable. Pensar en una bios que se quiere actualizar y por cualquier motivo existe un error

    en uno solo de sus bits. Es suficiente para que el PC no arranque. Para evitar esto, se

    distribuye por toda la bios checksums que van verificando bloques menores,

    Su uso no obstante se ha ido reduciendo con la aparicin de los Hash CRC, los cuales

    suelen realizar operaciones similares pero de una forma mucho ms efectiva. No obstante

    para pequeos bloques de datos o comprobaciones sencillas suele ser ms fcil y barato de

    implementar Checksums. Entre los Checksums ms habituales encontramos Sum8, Sum16,

    Sum32 o Sum64.

    CRC

    Se traduce como comprobacin de redundancia cclica. Su objetivo y uso es muy similar al

    del checksum, de tal modo que no es raro ver lugares en los cuales el nombre de CRC no es

    ms que un tipo de checksum. La necesidad de la verificacin de los datos es algo de suma

    importancia, siendo quizs su mximo exponente la firma digital, de la cual ya hablaremos

    de ella. Pero no solo la deteccin de errores es necesaria, a veces es necesaria tambin la

    correccin de estos. Aunque un checksum puede usarse para esto, es ms normal ver este

    tipo de correctores como CRC. Aun as, los sistemas de correccin de errores suelen ser

    costosos en cuanto a rendimiento, precio, implementacin tanto que normalmente no compensa, y es mucho ms eficiente simplemente un buen sistema de deteccin, y si la

    deteccin es erronea simplemente se retransmiten de nuevo los datos. Si bien los

    checksums pueden ser una herramienta muy extendida dentro de los propios archivos, los

    CRC suelen ser usado de forma mucho ms extensa en la transmisin de datos, aplicado

    normalmente a bloques de datos de un tamao mayor.

    El peor escenario que puede darse en una transmisin de datos o en un error en un archivo,

    es que este no pueda detectarse, haciendo que los datos sean enviados o procesados como

    legtimos. Y es esto lo que se debe de evitar a cualquier precio. Por ello, los CRC son

    usados intensamente en la transmisin de datos sobre internet, telefona y por supuesto en la integridad de los datos en un disco duro, CD, pendrive y otros dispositivos. Cuando

    hablo aqu de integridad no me estoy refiriendo a sistemas de checksums que puedan estar

    implementados en la misma estructura del archivo, sino sistemas de ingreidad que poseen

    los propios dispositivos. Gracias a la integracin hardware y la simplicidad de como opera

    un CRC (la mayora de ellos), la gran mayora de nuestro hardware implementa funciones

    CRC en l mismo, sin necesidad de un software. Es decir todo el proceso es transparente a nosotros.

    El funcionamiento de un CRC es simple. A un bloque de entrada se le aade primero los

    bits correspondiente al CRC, y el nuevo bloque se divide por un polinomio preestablecido.

    El resto de dicha divisin binaria ser el CRC. Dicho CRC se aade al bloque original y se

  • retransmite. El destino tomar el bloque y lo dividir por el polinomio generador (que ser

    el mismo que us el emisor). Si el resto es cero, no hay error de transmisin, o al menos no

    hay error detectable. La eficiencia radica por lo cual en el polinomio generador usado y

    evidentemente en el nmero de bits usados para el CRC. El caso ms simple de CRC sera

    el bit de paridad, que correspondera a un bit de CRC tan solo, y el polinomio generador

    sera X + 1, el cual se traducira como 11 como divisor del mensaje de entrada. Un polinomio generador tal como X