Diferencia entre revisiones de «Uso de técnicas de programación segura»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 87: Línea 87:
 
* 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.  
 
* 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.  
  
−
[[Image:Cryptographic_Hash_Function.png|thumb|375px|right|Unha función criptográfica hash (neste caso SHA-1) en funcionamento. Obsérvase que un pequeno cambio na entrada (na palabra ''over'') cambia de xeito notable a saída. Esté e o chamado [[https://es.wikipedia.org/wiki/Efecto_avalancha efecto avalancha]] que garantiza a propiedade de discontinuidade.]]
+
[[Image:Cryptographic_Hash_Function.png|thumb|375px|Unha función criptográfica hash (neste caso SHA-1) en funcionamento. Obsérvase que un pequeno cambio na entrada (na palabra ''over'') cambia de xeito notable a saída. Esté e o chamado [[https://es.wikipedia.org/wiki/Efecto_avalancha efecto avalancha]] que garantiza a propiedade de discontinuidade.]]
  
  

Revisión del 16:46 2 oct 2021

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.
Unha función criptográfica hash (neste caso SHA-1) en funcionamento. Obsérvase que un pequeno cambio na entrada (na palabra over) cambia de xeito notable a saída. Esté e o chamado [efecto avalancha] que garantiza a propiedade de discontinuidade.


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.

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.

Creditos e referencias