Uso de técnicas de programación segura
Sumario
Introdución
Profundizaremos na seguridade das comunicacións de datos entre procesos que se executan en ordenadores; concretamente en que os datos que un proceso emisor envía a outro proceso receptor:
- cheguen inalterados
- só ó receptor previsto
- e ten un modo de verificar que esto foi así.
No caso de que cheguen a algún outro, garantirase que non poida comprender a información codificada (que lle resulten inintelixible). Isto acádase encriptando ou cifrando os datos.
Os términos cifrado e encriptación aditan empregarse coma sinónimos, máis existe algún matiz que os diferencia. Podemos dicir que o cifrado ten un significado máis específico que encriptación, e que sempre é reversible; isto é, partindo do texto cifrado seempre se pode obter o texto original.
Comunicaciones de datos
Amosanse na figura os elementos que interveñen nunha comunicación entre dúas partes: unha que actúa como emisor e outra que actúa como receptor.
A información que se desexa transmitir codifícase e se transmite de emisor a receptor por un medio de comunicación. Cando a comunicación é entre dous procesos de ordenador, a mensaxe codifícase en binario (coma unha secuencia de ceros e unos).
o medio de comunicación non ten porque ser o ideal xa que as mensaxes:
- podense deteriorar, de xeito que se altere a súa información
- poden no chegar o seu destino
O medio adoita ser compartido con outros emisores e receptores. Implica isto:
- que poden ter acceso ó medio usuarios non previstos ou incluso maliciosos, que poden escoitar ou ter acceso as mensaxes que se transmiten polo medio, e incluso alterarlos
- o emisor non ten a seguridade total de que a mensaxe chegue ó receptor nin de que o faga inaleterado
- o receptor non ten forma de asegurar que a mensaxe proven do supuesto emisor.
En resumo o medio é inseguro ou non fiable.
A canle:
- adoita ser bidireccional (permite a comunicación en ambos sentidos)
- así pois ambas partes pueden actuar coma emisor e coma receptor, nunha comunicación duplex o bidireccional;o ocontrario é de tipo simplex ou unidireccional.
- e se poden actuar simultáneamente coma emisor e receptore trátase dunha comunicación full-duplex; o contrario (non poden simultáneamente) trátase dunha comunicación de tipo half-duplex.
Aspectos de seguridade nas comunicacións de datos
Os aspectos fundamentales da seguridade nas comunicacións de datos son os seguintes:
- Integridade
- Os datos que recibe o receptor son idénticos os que emitiu o emisor (non foron alterados en ningún punto intermedio no medio de comunicación). As alteracións poden ser:
- por fallos do propio medio (fallos eléctricos se a información se transmite por cables ou ópticos se se transmite por fibra óptica) ou interferencias de todo tipo
- ademáis da acción posible dalgún usuario malientencionado que desexa alterar os datos
- Confidencialidade
- os datos transmitidos só son intelixibles para o receptor previsto da mensaje (na práctica non se poderá impedir con total seguridade que cheguen a algún destinatario non previsto ou ilexítimo). Porén, os datos deben ser intelixibles só para o destinatario previsto, o que se acada enviando a mensaxe encritpada (e só o destinatario previsto será capaz de desencriptalo)
- Autenticación
- o receptor da mensaxe pode estar seguro de que o emisor da mensaxe é quen espera que sexa (o emisor da mensaxe é quen di ser e non un suplantador)
- Non repudio
- o receptor da mensaxe pode demostrar, unha vez recibida unha mensaxe dun emisor, que a mensaxe foi emitida polo devandito emisor. Deste xeito se o emisor negara ter emitido esa mensaxe, se lle podrá refutar.
As implicacións e a relevancia destes aspectos son distintas segundo os contextos nos que se produza a comunicación de datos entre procesos. Non ten os mesmos requisitos de seguridade unha comunicación entre dous fíos dun mesmo proceso a través de memoria compartida, que entre dous procesos que se executan en ordenadores de redes distintas e que deben pasar a través de múltiples redes a priori descoñecidas e sobre as que non se ten ningún control. Nun contexto así, o único que pode garantir a confidencialidade dos datos é a súa encriptación.
Funcións de hash
As funcións hash utilízanse para verificar a integridade do contido das mensaxes e para firma dixital, que garantiza a súa autenticación e non repudio.
Para comprender plenamente as funcións hash e as súas características é preciso a comprensión dos seus fundamentos desde unha perspectiva computacional. Pero non ímos profundizar moito neses conceptos, buscando comprender a grosso modo o seu funcionamento, e centrándonos máis no seu uso e posibilidades.
Unha función de hash ou digest fai corresponder a cada secuencia de bytes (por larga que sexa) uhna cadea de lonxitude fixa (e relativamente corta). O cálculo do hash ou digest para unha secuencia de bytes é moi rápido; pola contra é prácticamente imposible obter unha secuencia de bytes á que corresponda un valor de hash determinado. Dise por tanto que as funcións de hash son funcións unidireccionais (one-way functions).
MD5
Un exemplo de función de hash é MD5:
- a unha secuencia de bytes de calquer tamaño faille corresponder un valor de 128 bits.
Esta función está implementada en Linux no comando md5sum. Está implementado tamén em linguaxes de scripting coma PHP como MD5
Aínda que altamente improbable, pode producirse unha colisión de hash: unha situación que se produce cando dúas entradas distintas a unha función de hash producen a mesma saída. E de feito, MD5 xa non se considera segura desde que no ano 2006 probouse unha implementación de colisións en MD5 que pemite crear archivos de lonxitude arbitraria que teñan hash MD5 idéntico e que difieren en só 128 bytes nalgún lugar en mitad do fichero (ataques coñecidos coma de tipo chosen-prefix)
SHA
SHA é unha familia de funcións criptográficas hash:
- SHA-0
- SHA-1
- SHA-2
- SHA-3
Só SHA-0 é vulnverable, aínda que en SHA-1 xa se constataron debilidades matemáticas que fan peligrar a súa seguridade a medio prazo.
Outras funcións hash
Propiedades dunha función hash
Todas as funcións hash comparten unhas propiedades importantes, que son requisitos para que se poidab considerar unha boa función de hash:
- Non reversibilidade. Debe ser prácticamente imposible obter unha secuencia para a que a función de hash calcule un valor determinado. Con esto non se garante a imposibilidade teórica, se non a imposibilidade práctica; debe ter un coste computacional enorme atopar unha secuencia de bytes para a que o seu valor de hash sea un determinado.
Pódese calcular rápidamente o hash MD5 para un valor determinado; pero á inversa, é na práctica case imposible averiguar un valor que teña ese hash MD5. Normalmente haberá moitos porque as funcións de hash non son inyectivas; mais en principio o único xeito de atopar un sería calculando o hash MD5 para una secuencia tras outra ata que para algunha se obteña o valor de hash buscado. Entón atoparemos o que se chama unha colisión de hash.
Esta estratexia de probar un valor tras outro ata atopar un valor cun mesmo valor de hash é un ataque de forza bruta para atopar unha colisión de hash.
Unha das aplicacións das funcións de hash que aproveita esta propiedade é a validación de contrasinais sen necesidad de almacenar o seu valor. En troques o que se almacena é o resultado de aplicar a función de hash o contrasinal. Cando se quere verificar un contrasinal introducida por un usuario do sistema, calcúlase o valor de hash e se compara co previamente almacenado. Por exemplo en sistemas Linux, no ficheiro /etc/shadow almacena un hash dos contrasinais en lugar dos propios contrasinais.
Unha colisión de hash, é dicir, unha secuencia de caracteres que teña como valor de hash o almacenado neste ficheiro, permitiría dar por válida como contrasinal esa secuencia de caracteres.
- Uniformidade. O número de posibles secuencias é moi superior o número de posibles valores que pode tomar a función de hash. Porén, cada posible valor de hash corresponderá en xeral a múltiples secuencias. A propiedade de uniformidade consiste en que cada valor de hash corresponde, aproximadamente, o mesmo número de secuencias; isto é, que non debe haber valores de hash sobrerrepresentados que teñan notablemente máis tendencia a sair como resultado da función de hash.
- Discontinuidade. Pequenas variacións na secuencia de bytes deberían dar como resultado grandes variacións no valor do hash calculado. Por exemplo cambiando un só byte nun ficheiro de moitos megabytes, a variación no valor do seu hash debería ser sustancial. o novo valor debería estar moi alonxado (na súa representación binaria deberían cambiar moitos bits), e ó longo de toda ela.
Controversia A NSA é unha axencia de inteligencia do goberno dos Estados Unidos. Diseña moitos métodos e moitos dos algoritmos criptográficos ampliamente utilizados na actualidade. Isto suscita controversia por ser a NSA unha axencia de intelixencia dun goberno, e que pode estar especialmente interesada en atopar e explotar vulnerabilidades dos sistemas informáticos e das comunicacións.
Funcións hash máis frecuentemente utilizadas
A modo de resumo, esta táboa amosa as funcións hash mais utilizadas:
| Función | Descripción |
|---|---|
| MD5 | Creado por Ronald Rivest en 1991. Produce valores de 128 bits. Utilízase ampliamente para verificar a integridade de ficheiros. Descubrironse vulnerabilidades que non o fan apropiado para o seu uso actual en criptografía. |
| SHA-1 | Produce valores de 160 bits. Desenvolto pola National Security Agency (NSA). Na actualidade tampouco se considera coas suficientes garantías de seguridade. |
| SHA-2 e SHA-3 | Producen valores de 224, 256, 384 o 512 bits segundo a variante. SHA3 ten variantes que permiten xerar valores de hash de lonxitude arbitraria. |
Integridade nas comunicacións de datos
Criptografía
A encriptación de datos pódese facer:
- con criptografía de clave pública, que adquiríu unha importancia decisiva co crecemento de internet.
- con criptografía de clave privada.
Moitos métodos criptográficos usan criptografía tanto de clave pública como de clave privada:
De clave pública (ou asimétrica)
De clave privada (ou simétrica)
Firma dixital
Certificados dixitais
TLS / SSL
TLS/SSL (Transport Layer Securiry / Secure Sockets Layer)
Funcionamento
Túneles con SSH
Resumo
- A seguridade en comunicacións de datos entre procesos inclúe distintos aspectos complementarios que son importantes no caso común no que a comunicación entre emisor e receptor realizase a través dun medio de comunicación non seguro. Estes aspectos son:
- a integridade
- a confidencialidade
- a autenticación
- o non repudio. .
- Unha función de hash calcula a partir dunha secuencia de bytes de lonxitude arbitrariamente longa unha secuencia de lonxitude fixa. Debe cumprir os requisitos de:
- non reversibilidade
- uniformidade
- discontinuidade.
- Na actualidade non se considera seguro para o seu uso en criptografía as funcións:
- MD5
- SHA-1
- O cifrado consiste en obter unha mensaxe cifrada (inintelixible para todo aquel que descoñezca a clave secreta) a partir dunha secuencia de bytes ou mensaxe en claro. A clave secreta permite obter a mensaxe en claro orixinal; porén, o cifrado é reversible.
- Tanto o cifrado dunha mensaxe coma o cálculo do seu valor de hash consideranse operacións criptográficas. O cifrado é reversible. Pola contra, o cálculo dun valor de hash non é reversible.
- Cando se obten un valor para o que unha función de hash obten un valor determinado prodúcese unha colisión de hash.
- Considérase unha función de hash robusta cando non é viable obter unha colisión de hash por forza bruta (probando un a un os posibles valores) e non existe ningún método de criptoanálise que permita seleccionar un conxunto máis reducido de valores cunha maior probabilidade de éxito.
- Do mesmo xeito, considérase un método de cifrado robusto cando non é viable obter o valor en blanco orixinal para un valor cifrado por forza bruta, e cando non existe ningún método de criptoanálise que permita seleccionar un conxunto máis reducido de valores cunha maior probabilidade de éxito.
- A criptografía de clave privada ou criptografía simétrica, basease no uso dunha mesma clave secreta por emisor para o encriptado de mensaxes e polo receptor para o seu desencriptado.
- A criptografía de clave pública ou criptografía asimétrica basease no uso dun par de claves, unha privada e outra pública, entre as que existe unha relación matemática.
- Coa clave pública pódese encriptar unha mensaxe de xeito que só se poderá desencriptar coa clave privada.
- Coa clave privada, xunto con unha función de hash, pódese calcular unha firma dixital, que só pode xerar o coñecedor da clave privada, pero que pode verificar calquer coñecedor da clave pública.
- Un certificado dixital X.509 conten a clave pública dunha persona ou entidade, e está asinado dixitalmente por unha AC; pódese utilizar para operacións de cifrado e para verificación de firma dixital.
- Unha PKI é unha combinación de hardware, software, procedimentos de seguridade e marco legal, que en conxunto permite a execución con garantías de operacións criptográficas, cumprindo os requisitos de integridade, confidencialidade, autenticación e non repudio. Unha PKI permite establecer e xestionar asociacións entre claves públicas e identidades de personas e de organizacións.
- Un certificado raíz é un emitido por unha AC, asinado por ela mesma (isto é, autoasinado), e que permite verificar a firma dos certificados dixitais emitidos por ella. Un certificado autoasinado só se considera válido se está emitido por unha AC.
- TLS/SSL utiliza unha combinación de técnicas criptográficas de clave pública e privada,e permite encriptar os datos transmitidos mediante o protocolo de transporte TCP.
Práctica
Glosario
- Ataque criptográfico
- Intento de atopar o texto en claro a partir do texto encriptado sen coñecer previamente a clave; tamén intento de obter unha colisión de hash para un valor de hash determinado.
- Autenticación
- Seguridade para o receptor dunha información de quén é o seu emisor.
- Certificado dixital
- Documento digital que conten información utilizada para criptografía de clave pública, e que permite acreditar a identidade do seu poseedor ou titular.
- Cifrado ou encriptación
- Representación dunha información dunha forma alternativa de xeito que sexa inintelixible; pero que se poida obter a información na súa forma orixinal se se coñece unha información secreta ou clave.
- Colisión de hash
- Hallazgo dunha secuencia de bytes para os que unha función de hash da como resultado un valor determinado.
- Confidencialidade
- Seguridade de que unha información transmitida hacia un receptor so é recibida por él (ou candomenos so é intelixible para él).
- Criptografía de clave privada
- Conxunto de métodos criptográficos, para encriptado (uo cifrado) e desencriptado (ou descifrado) de mensaxes, que se basean nunha clave ou secreto compartido entre emisor e receptor.
- Criptografía de clave pública
- Conxunto de métodos criptográficos que se basean nunha clave privada coñecida só por unha das partes, e unha clave pública asociada coñecida polas dúas. Inclúe métodos para encriptado (ou cifrado), desencriptado (ou descifrado) e firma dixital.
- Firma dixital
- Secuencia de bytes de lonxitude relativamente corta obtida a partir dunha secuencia de bytes, e que só pode calcular o coñecedor do valor dunha clave privada; pero que calquera pode, utilizando unha clave pública asociada con esa clave privada, verificar que foi xenerada por él.
- Función de hash
- Función que fai corresponder a unha secuencia de datos de lonxitude arbitrariamente longa unha secuencia de lonxitude fixa, e que cumple os requisitos de non reversibilidade, uniformidade e discontinuidade.
- Infraestrutura de clave pública (PKI)
- Combinación de medios e procedementos tecnolóxicos, administrativos e legales que, en conxunto, permiten a execución con garantías de operacións criptográficas baseadas en criptografía de clave pública, cumprindo os requisitos de integridade, confidencialidade, autenticación e non repudio.
- Integridade
- Seguridade para o receptor dunha información transmitida de emisor a receptor, a través dunha canle de comunicacións, de que esta no foi alterada na canle entre ambos.
- Non repudio
- Posibilidade de demostrar que unha información foi emitida por un emisor determinado.
- TLS/SSL
- Protocolo de seguridade que funciona a nivel de aplicación sobre o protocolo de transporte TCP; que utiliza unha combinación de métodos criptográficos de clave pública e privada; e que permite a encriptación dos datos transmitidos nos segmentos de datos do protocolo de transporte TCP.
- X.509
- Estándar para certificados dixitais.