Return to Video

Bitcoin - Função criptográfica de hash

  • 0:01 - 0:05
    Funções criptográficas de hash são
    basicamente alicerces fundamentais
  • 0:05 - 0:08
    que são usados dentro de vários
    algoritmos de criptografia e protocolos.
  • 0:08 - 0:11
    Nós temos um grande número
    de aplicações importantes
  • 0:11 - 0:14
    no contexto de segurança da
    informação como um todo.
  • 0:14 - 0:17
    Alguns dos algoritmos mais
    conhecidos nessa categoria,
  • 0:17 - 0:19
    conhecidos como funções
    criptográficas de hash,
  • 0:19 - 0:26
    incluem MD5, e ele também tem
    predecessores como MD4 e outros;
  • 0:26 - 0:30
    bem como os algoritmos SHA-256,
  • 0:30 - 0:35
    e, na verdade, SHA-256 é precedido
    por outros algoritmos como SHA-1
  • 0:35 - 0:37
    e assim por diante,
  • 0:37 - 0:41
    e também há alguns algoritmos que
    talvez você tenha ouvido falar,
  • 0:41 - 0:46
    talvez eles sejam menos conhecidos, mas
    temos RIPEMD e BLAKE e Skein e outros.
  • 0:46 - 0:49
    Bem, funções criptográficas
    de hash são basicamente
  • 0:49 - 0:52
    usadas como partes críticas
    de várias aplicações
  • 0:52 - 0:55
    e, a primeira aplicação que motivou,
  • 0:55 - 0:59
    a primeira aplicação histórica
    desses tipos de funções de hash
  • 0:59 - 1:03
    foi no contexto conhecido
    como assinatura digital.
  • 1:03 - 1:08
    E assinatura digital é usada em tantas
    aplicações criptográficas diferentes hoje,
  • 1:08 - 1:12
    ela é o pilar de muitos
    protocolos de e-commerce,
  • 1:12 - 1:15
    é usada para fazer coisas como
    geração de Bitcoin por exemplo.
  • 1:15 - 1:20
    Funções criptográficas de hash são usadas
    em protocolos de autenticação de mensagens
  • 1:20 - 1:24
    na geração de números pseudo-aleatórios
    e na segurança de senhas
  • 1:24 - 1:26
    até mesmo em criptografia em certo grau
  • 1:26 - 1:31
    e, na verdade, além de seu
    uso em assinaturas digitais,
  • 1:31 - 1:35
    essas funções de hash são também usadas
    em outros lugares do protocolo Bitcoin.
  • 1:35 - 1:40
    Então, antes de tudo deixe-me falar sobre
    o que uma função criptográfica de hash é.
  • 1:40 - 1:44
    E, é claro, como o próprio nome implica,
    a primeira coisa, ela é uma função de hash
  • 1:44 - 1:49
    e por função de hash eu quero dizer
    que ela vai receber uma entrada,
  • 1:49 - 1:52
    ela é uma função matemática,
    uma transformação se preferir,
  • 1:52 - 1:57
    que recebe uma entrada particular,
    e chamamos essa entrada de uma "mensagem"
  • 1:57 - 2:00
    e a mensagem pode ser
    de um tamanho arbitrário
  • 2:00 - 2:05
    e a função de hash basicamente aplica
    uma transformação matemática,
  • 2:05 - 2:08
    talvez um conjunto de transformações
    matemáticas, nessa entrada
  • 2:08 - 2:09
    para produzir uma única saída.
  • 2:09 - 2:14
    Nós normalmente chamamos essa saída de
    resumo, entretanto às vezes você verá essa
  • 2:14 - 2:19
    saída sendo referida como uma etiqueta,
    ou uma hash, ou uma impressão digital;
  • 2:19 - 2:22
    mas resumo é um dos
    nomes mais comuns.
  • 2:22 - 2:27
    E, na verdade, MD5 - que foi uma das
    primeiras funções de hash - significa
  • 2:27 - 2:29
    "Message Digest 5" (Resumo da Mensagem 5)
  • 2:29 - 2:33
    e MD4 é "Message Digest 4" (Resumo da
    Mensagem 4) e assim por diante.
  • 2:33 - 2:37
    A mensagem, como eu mencionei breviamente,
    pode ser de um tamanho arbitrário
  • 2:37 - 2:40
    pode ser tão longa quanto quiser,
    ou pode ser tão curta quanto quiser,
  • 2:40 - 2:46
    mas a saída, o tamanho do resumo
    vai ser de um tamanho fixo.
  • 2:46 - 2:51
    Por exemplo, no contexto de uma função
    de hash como, vamos dizer, SHA-256,
  • 2:51 - 2:56
    o resumo vai ter exatamente
    256 bits de tamanho.
  • 2:56 - 3:01
    Então vai ter uma saída de tamanho fixo
    mas uma entrada de tamanho arbitrário
  • 3:01 - 3:05
    E a outra coisa que quero ressaltar sobre
    essas funções criptográficas de hash é
  • 3:05 - 3:10
    que a função é uma função determinística,
    e por isso eu quero dizer que
  • 3:10 - 3:12
    a saída sempre será a mesma
    para uma entrada específica.
  • 3:12 - 3:16
    Então se você tem uma entrada específica,
    vai ver a mesma exata saída.
  • 3:16 - 3:20
    Você não vai ter uma situação em que dado
    uma entrada terá duas possíveis saídas.
  • 3:20 - 3:21
    Vai ser consistente.
  • 3:22 - 3:27
    Bem, funções de hash tradicionais vem
    sendo usadas em Ciência da Computação
  • 3:27 - 3:30
    há bastante tempo e elas são usadas
    em várias aplicações computacionais.
  • 3:30 - 3:35
    Você talvez tenha ouvido sobre uma função
    hash usada para fazer uma tabela hash.
  • 3:35 - 3:40
    Mas o tipo de funções hash que são usadas
    em tabelas hash, e eu quero destacar isso,
  • 3:40 - 3:45
    não são necessariamente o mesmo
    que funções criptográficas de hash.
  • 3:45 - 3:48
    O qualificador 'criptográficas'
    aqui é muito importante.
  • 3:48 - 3:54
    E geralmente significa que essa função
    hash tem que ter um certo conjunto de
  • 3:54 - 3:58
    objetivos críticos de design e talvez
    algumas propriedades particulares em mente
  • 3:58 - 4:04
    que a faça adequada para o uso em
    aplicações que usem criptografia
  • 4:04 - 4:08
    onde talvez segurança ou privacidade,
    ou confidencialidade ou autenticação
  • 4:08 - 4:10
    é uma preocupação séria.
  • 4:11 - 4:15
    Então, primeiro e antes de tudo em
    descrevendo as propriedades de alguém
  • 4:15 - 4:17
    é que, e talvez isso nem precise ser dito,
  • 4:17 - 4:20
    uma das propriedades que você quer
    em uma função criptográfica de hash
  • 4:20 - 4:25
    é que ela deveria ser computacionalmente -
    computacionalmente eficiente.
  • 4:25 - 4:27
    E com isso quero dizer que
    ela não deveria levar muito tempo
  • 4:27 - 4:31
    para computar a saída de
    uma determinada entrada
  • 4:31 - 4:35
    Se você recebe uma mensagem e quer aplicar
    um conjunto de transformações nesta
  • 4:35 - 4:40
    mensagem para obter um resumo, esse
    conjunto de transformações não deveria
  • 4:40 - 4:44
    tomar muito tempo para ser implementado
    em um computador, deveria ser bem rápido.
  • 4:44 - 4:47
    E isso quase nem precisava ser dito mas
    acho importante reforçar e destacar
  • 4:47 - 4:51
    porque eu já vi pessoas fazerem
    implementações grosseiramente ineficientes
  • 4:51 - 4:54
    de funções de hash algumas vezes e estas
    não seriam consideradas adequadas
  • 4:54 - 4:58
    no contexto de uma típica função
    criptográfica de hash que é usada para
  • 4:58 - 5:00
    aplicações criptográficas.
  • 5:01 - 5:05
    E a segunda propriedade que geralmente
    se precisa, especialmente no contexto de
  • 5:05 - 5:11
    assinatura digital, é: você quer que seja
    o caso de ser difícil que duas entradas
  • 5:11 - 5:15
    sejam mapeadas realmente para a mesma
    entrada. Duas entradas distintas
  • 5:15 - 5:18
    cujos resumos correspondentes
    sejam idênticos.
  • 5:18 - 5:24
    E essa propriedade geralmente é chamada de
    colisão, resistência à colisões.
  • 5:24 - 5:29
    Isso significa que é difícil achar
    um par de entradas que colidam.
  • 5:29 - 5:34
    Em outras palavras, se temos duas entradas
    vamos dizer uma mensagem M1 e uma M2.
  • 5:34 - 5:40
    Suas saídas da aplicação da função de hash
    não deveriam ser a mesma.
  • 5:40 - 5:48
    Você nunca teria o caso em que a saída
    de M1 e M2 da aplicação da função de hash
  • 5:48 - 5:52
    são iguais. Nunca deveria ser igual.
    Deve sempre ser diferente.
  • 5:52 - 5:58
    Eu deveria voltar um passo e
    destacar que, é claro, na prática,
  • 5:58 - 6:05
    dado que a mensagem pode ser de um tamanho
    arbitrário e a saída é de um tamanho fixo,
  • 6:05 - 6:11
    não é mateticamente possível garantir
    que a saída sempre será diferente
  • 6:11 - 6:13
    para duas mensagens distintas.
  • 6:13 - 6:17
    Mas o que você geralmente quer não é que
    as saídas sejam necessariamente diferentes
  • 6:17 - 6:21
    mas que seja difícil para achar mensagens
    distintas que produzem a mesma saída.
  • 6:21 - 6:25
    Nós sabemos que elas existem em virtude do
    fato que mensagens podem ser mapeadas
  • 6:25 - 6:28
    em apenas um número finito e pequeno
  • 6:28 - 6:31
    (ou relativamente um número pequeno se
    comparado ao número de mensagens)
  • 6:31 - 6:34
    um número pequeno de
    possíveis valores resumo.
  • 6:34 - 6:39
    Mas fora essa consideração, deveria ser
    difícil, deveria levar muito tempo,
  • 6:39 - 6:43
    e por muito tempo eu quero dizer
    astronomicamente muito tempo para achar
  • 6:43 - 6:50
    duas mensagens distintas que resultariam
    na mesma saída aplicando a função de hash.
  • 6:51 - 6:54
    Bem, a terceira coisa que eu quero
    ressaltar é que em vários casos
  • 6:54 - 6:59
    você pode também querer, no contexto das
    funções de hash, que a função seja capaz
  • 6:59 - 7:02
    de esconder informações
    sobre as entradas.
  • 7:02 - 7:09
    Em outras palavras, dado a saída, deveria
    ser difícil coletar qualquer informação
  • 7:09 - 7:13
    útil ou interessante sobre a entrada.
    Qualquer coisa, qualquer detalhe relevante
  • 7:13 - 7:17
    e não quero dizer apenas a entrada inteira
    mas até mesmo uma coisa tão simples quanto
  • 7:17 - 7:20
    "a entrada era um número par
    ou um número ímpar?"
  • 7:20 - 7:24
    E isso deveria ser o tipo de coisa que é
    difícil inferir quando você vê a saída.
  • 7:24 - 7:30
    Até mesmo algo tão simples quanto a
    paridade ou imparidade da entrada.
  • 7:31 - 7:33
    Agora, a quarta propriedade
    que quero ressaltar
  • 7:33 - 7:37
    é que você geralmente quer
    que a saída seja bem distribuída.
  • 7:37 - 7:44
    Em outras palavras, a saída
    deve parecer aleatória.
  • 7:44 - 7:48
    Deve parecer como se fosse um conjunto de
    jogadas de moeda feitas de nenhuma forma
  • 7:48 - 7:53
    previsível em que a saída foi criada.
  • 7:54 - 8:00
    E isso significa que é quase como se você
    jogasse várias moedas para fazer a saída.
  • 8:00 - 8:03
    Deve parecer aleatório.
  • 8:03 - 8:08
    Você pode pensar em funções criptográficas
    de hash como talvez o equivalente
  • 8:08 - 8:11
    matemático ou análogo
    de um moedor de carne.
  • 8:11 - 8:16
    Ele pode receber entradas e aplicar essas
    transformações matemáticas nelas
  • 8:16 - 8:21
    de modo que a saída pareça, para todos os
    propósitos, completamente aleatória
  • 8:21 - 8:23
    e sem relação com
    a entrada original.
  • 8:24 - 8:28
    Eu quero fazer algumas pequenas
    observações sobre essas propriedades.
  • 8:28 - 8:32
    E antes de tudo, elas são
    inter-relacionadas - por exemplo,
  • 8:32 - 8:38
    se você tem uma situação onde a saída não
    aparenta mesmo ter relação com a entrada,
  • 8:38 - 8:40
    e a saída também parece aleatória,
  • 8:40 - 8:45
    então isso vai te dar na verdade, em certo
    grau, uma grande resistência a colisões
  • 8:45 - 8:49
    porque apenas o fato de que você não pode
    prever a saída e o fato de que ela esconde
  • 8:49 - 8:54
    toda essa informação implica que vai ser
    difícil achar duas entradas distintas
  • 8:54 - 8:56
    que são mapeadas para a mesma saída.
  • 8:56 - 8:59
    E então, às vezes você consegue uma
    propriedade em troca das outras.
  • 8:59 - 9:03
    A segunda coisa que eu quero ressaltar
    é que geralmente essas propriedades
  • 9:03 - 9:08
    na prática, ou até mesmo em matemática
    subjacente, são coisas que você espera por
  • 9:08 - 9:11
    mas que você não pode sempre garantir
    que elas serão sempre válidas.
  • 9:11 - 9:15
    E talvez seja completamente possível que
    você poderia desenvolver uma função hash
  • 9:15 - 9:18
    que você pensa ser completamente
    resistente à colisões
  • 9:18 - 9:22
    mas alguém pode aparecer e, daqui a um ano
    inventar uma maneira mais inteligente
  • 9:22 - 9:24
    para achar colisões.
  • 9:24 - 9:29
    Talvez ele tenha descoberto um jeito que
    não involva fazer uma busca de força bruta
  • 9:29 - 9:35
    E acontece que criptógrafos, para o bem ou
    para o mal, atualmente não têm nenhuma
  • 9:35 - 9:38
    técnica matemática, eles não
    desenvolveram técnicas capazes de
  • 9:38 - 9:40
    contornar algumas dessas limitações.
  • 9:40 - 9:45
    Assim, nós frequentemente tomamos como
    base de quanto esses esquemas são seguros
  • 9:45 - 9:48
    pelo tempo que eles
    vêm sendo utilizados.
  • 9:48 - 9:52
    Agora eu também quero destacar uma última
    coisa, essa forma como tratei o assunto
  • 9:52 - 9:55
    não é de forma alguma
    matematicamente rigoroso.
  • 9:55 - 10:01
    Existem métodos muito mais precisos
    de descrever essas propriedades.
  • 10:01 - 10:06
    Mas eu espero que esse vídeo
    talvez te dê uma noção geral
  • 10:06 - 10:09
    do que é necessário a uma função
    criptográfica de hash
  • 10:09 - 10:12
    sem ficar chato entrando em
    detalhes formais matemáticos.
  • 10:12 - 10:13
    [Legendado por Alberto Oliveira]
Title:
Bitcoin - Função criptográfica de hash
Description:

O que funções criptográficas de hash são e quais propriedades são desejadas delas.

more » « less
Video Language:
English
Duration:
10:14

Portuguese, Brazilian subtitles

Incomplete

Revisions