Return to Video

MAC estofamento (9 min)

  • 0:00 - 0:04
    No último segmento, falamos sobre o CBC-MAC eo NMAC, mas em todo
  • 0:04 - 0:08
    segmento a que sempre assumido que o comprimento da mensagem foi um múltiplo do bloco
  • 0:08 - 0:12
    tamanho. Neste segmento, vamos ver o que fazer quando o comprimento da mensagem não é
  • 0:12 - 0:17
    um múltiplo do tamanho do bloco. Então, lembrar que a CBC mac criptografado ou ECBC-MAC para
  • 0:17 - 0:21
    usos curtas pseudo-F permutação de realmente computar a função CBC como nós
  • 0:21 - 0:26
    discutido no último segmento. Mas, no último segmento, sempre assumido que o
  • 0:26 - 0:30
    própria mensagem pode ser dividida em um número inteiro de blocos para o bloco
  • 0:30 - 0:35
    cifra. E a pergunta é o que fazer quando o comprimento da mensagem não é um múltiplo
  • 0:35 - 0:39
    do tamanho do bloco. Portanto, temos aqui uma mensagem onde o último bloco é realmente
  • 0:39 - 0:43
    menor do que o bloco inteiro ea questão é como calcular o ECBC-MAC em
  • 0:43 - 0:48
    caso disso. Portanto, a solução de curso é a mensagem de almofada ea almofada primeiro que
  • 0:48 - 0:52
    me vem à mente é simplesmente pad a mensagem com todos os zeros. Em outras palavras, assumir a
  • 0:52 - 0:57
    último bloco e adicionar apenas zeros a ele até o último bloco torna-se, enquanto um total
  • 0:57 - 1:02
    tamanho do bloco. E por isso a minha pergunta é se o MAC resultante é seguro. Assim
  • 1:02 - 1:07
    , a resposta é não, o MAC não é seguro. E deixe-me explicar por que, basicamente, o
  • 1:07 - 1:12
    problema é que é possível agora avançar com mensagens para que m mensagem e do
  • 1:12 - 1:18
    m mensagem concatenada de zero acontecer de ter exatamente o mesmo Pad. E, como resultado, uma vez
  • 1:18 - 1:23
    nos ligar tanto m e m | | 0 em ECBC vamos tirar o mesmo tag, o que significa que
  • 1:23 - 1:28
    tanto m e m | | 0 tem a mesma marca e, portanto, o atacante pode
  • 1:28 - 1:33
    montar uma falsificação existencial. Pedia a tag na mensagem m. E então ele
  • 1:33 - 1:38
    geraria como falsificação da marca ea mensagem m | | 0. E é
  • 1:38 - 1:43
    fácil dizer por que é o caso. Basicamente, para ser absolutamente claro aqui, temos a nossa
  • 1:43 - 1:48
    m mensagem. Que após enchimento torna-se M000. Então tivemos que adicionar três
  • 1:48 - 1:53
    0 é para ele. E aqui temos a mensagem m zero, um m que termina com zero. E depois
  • 1:53 - 1:58
    estofamento, basicamente agora tem que adicionar dois 0 a ele. E eis que, tornam-se
  • 1:58 - 2:03
    no mesmo bloco, de modo que vamos ter exatamente a mesma tag que permite que o
  • 2:03 - 2:08
    adversário para montar o ataque falsificação existencial. Então isso não é uma boa idéia. Em
  • 2:08 - 2:13
    fato anexando todos os 0s é uma idéia terrível. E se você pensa sobre o caso concreto onde
  • 2:13 - 2:17
    isso vem se imaginar o sistema de compensação automática de casa usada para limpar
  • 2:17 - 2:22
    cheques. Eu poderia ter um cheque de US $ 100 e marca nessa seleção. Bem, agora, o
  • 2:22 - 2:26
    atacante basicamente poderia acrescentar um zero para o meu cheque e torná-lo um cheque de US $ 1000,
  • 2:26 - 2:30
    e que não iria realmente mudar a marca. Portanto, esta capacidade de estender a mensagem
  • 2:30 - 2:34
    sem alterar a tag na verdade poderia ter consequências bastante desastrosas. Então, eu
  • 2:34 - 2:39
    espero que este exemplo convence que a função de preenchimento em si deve ser um a
  • 2:39 - 2:43
    uma função. Em outras palavras, deve ser o caso que duas mensagens distintas sempre
  • 2:43 - 2:47
    mapa para duas distintas mensagens acolchoados. Não devemos realmente ter uma colisão no
  • 2:47 - 2:51
    função de preenchimento. Outra maneira de dizer é que a função de preenchimento deve ser
  • 2:51 - 2:55
    inversível. Isso garante que a função de preenchimento é 1-1. Assim, um
  • 2:55 - 3:00
    maneira padrão de fazer isso foi proposto pela Organização Internacional de Normalização
  • 3:00 - 3:05
    ISO. O que eles sugerem é, basicamente, vamos acrescentar a string 100000 para o fim
  • 3:05 - 3:10
    da mensagem para tornar a mensagem ser um múltiplo do comprimento do bloco. Agora, para ver
  • 3:10 - 3:14
    que este preenchimento é inversível, tudo o que fazemos é descrever o algoritmo de inversão
  • 3:14 - 3:19
    que simplesmente vai digitalizar a mensagem da direita para a esquerda, até atingir o
  • 3:19 - 3:24
    primeiro e então ele vai remover todos os bits para a direita deste,
  • 3:24 - 3:28
    incluindo a um. E você vê que uma vez nós removemos o padrão dessa maneira, nós
  • 3:28 - 3:32
    obter a mensagem original. Então aqui está um exemplo, então temos aqui uma mensagem onde
  • 3:32 - 3:37
    o último bloco acontece ser mais curto do que o comprimento do bloco, e então
  • 3:37 - 3:41
    acrescentar a string 1,0,0 a ele. É muito fácil ver o que o bloco é,
  • 3:41 - 3:45
    basta olhar para o primeiro da direita, podemos remover esta almofada e recuperar
  • 3:45 - 3:50
    costas mensagem original. Agora há um caso de canto que é realmente muito
  • 3:50 - 3:54
    importante, e é isso que vamos fazer se o comprimento da mensagem original já é o
  • 3:54 - 3:59
    múltiplo de um tamanho de bloco? Nesse caso é realmente muito, muito importante que nós
  • 3:59 - 4:04
    adicionar um bloco simulado extra. Que contém o bloco 1000. E novamente, eu não posso te dizer
  • 4:04 - 4:08
    quantos produtos e padrões que realmente cometeram esse erro, onde
  • 4:08 - 4:13
    não adicionar um bloco de manequim e, como resultado, o MAC é inseguro porque existe um
  • 4:13 - 4:17
    ataque de falsificação de fácil existencial. E deixe-me mostrar-lhe porquê. Então, suponho que no caso do
  • 4:17 - 4:22
    mensagem é um múltiplo de uma extensão do bloco, vamos supor que não adicionar um bloco de manequim e nós
  • 4:22 - 4:26
    literalmente MAC-ed esta mensagem aqui. Bem, o resultado agora é que se você olhar para
  • 4:26 - 4:31
    mensagem o que é um múltiplo do tamanho do bloco e uma mensagem de que não é um
  • 4:31 - 4:36
    múltiplo do tamanho do bloco, mas será preenchido com o tamanho do bloco, e imaginá-lo assim
  • 4:36 - 4:41
    acontece que esta mensagem m um primo acontece a terminar com 1-0-0. Neste ponto,
  • 4:41 - 4:45
    você perceber que aqui, a mensagem original. Aqui, deixe-me chamar assim.
  • 4:45 - 4:50
    Você percebe que a mensagem original após o preenchimento. Seria idêntico ao
  • 4:50 - 4:55
    a segunda mensagem que não foi preenchido em tudo. E, como resultado, se eu pedir a tag
  • 4:55 - 5:00
    sobre esta mensagem por aqui, gostaria de obter também a tag na segunda mensagem que
  • 5:00 - 5:04
    aconteceu para terminar em 1-0-0. Ok, então se não adicionar o bloco de manequim, basicamente,
  • 5:04 - 5:09
    , novamente, o teclado não seria inversível, porque duas mensagens diferentes, duas
  • 5:09 - 5:13
    mensagens distintas, acontecer para mapear para o mesmo resultado acolchoada. Novamente, como resultado,
  • 5:13 - 5:18
    do MAC torna-se inseguro. Então, para resumir, essa norma ISO é uma maneira perfeitamente bem
  • 5:18 - 5:23
    para almofada, exceto que você tem que se lembrar também de adicionar um bloco de manequim na mensagem caso é um
  • 5:23 - 5:27
    múltiplo do comprimento do bloco, para começar. Agora alguns de vocês podem estar se perguntando
  • 5:27 - 5:31
    se existe um esquema de preenchimento que nunca necessita de adicionar um bloco simulado, ea resposta
  • 5:31 - 5:35
    é que se você olhar para uma função de preenchimento determinista, então é muito fácil
  • 5:35 - 5:39
    argumentam que sempre haverá casos em que precisamos para preencher, ea razão é
  • 5:39 - 5:44
    apenas literalmente o número de mensagens que são múltiplos de o comprimento do bloco é muito
  • 5:44 - 5:49
    menor do que o número total de mensagens que não precisam de ser um múltiplo do bloco
  • 5:49 - 5:53
    comprimento. E, como resultado, não podemos ter uma função 1-1 a partir desta maior
  • 5:53 - 5:57
    conjunto de todas as mensagens para o menor conjunto de mensagens que são um múltiplo de
  • 5:57 - 6:01
    comprimento do bloco. Sempre haverá casos em que temos que estender o original
  • 6:01 - 6:05
    comprimento do bloco. Sempre haverá casos em que temos que estender o original
  • 6:05 - 6:09
    bloco. No entanto, existe uma ideia muito inteligente chamada CMAC que mostra que o uso de um
  • 6:09 - 6:14
    função de preenchimento aleatório podemos evitar de ter que sempre adicionar um bloco de manequim. E assim
  • 6:14 - 6:18
    deixe-me explicar como CMAC funciona. Então CMAC realmente usa três chaves. E, na verdade,
  • 6:18 - 6:23
    às vezes isso é chamado de construção chave três. Portanto, esta primeira chave, K, é
  • 6:23 - 6:28
    usado na CBC, o padrão CBC algoritmo MAC. E então as chaves, K1 e K2,
  • 6:28 - 6:33
    são usados apenas para o esquema de preenchimento no bloco muito, muito passado. E de fato, em
  • 6:33 - 6:38
    o padrão CMAC, as chaves de K1, K2 são derivadas da chave K por algum tipo de uma
  • 6:38 - 6:44
    gerador pseudo-aleatório. Assim, a maneira CMAC funciona é como se segue. Bem, se a mensagem
  • 6:44 - 6:49
    acontece a não ser um múltiplo de uma extensão do bloco, em seguida, nós adicionamos o preenchimento ISO para
  • 6:49 - 6:54
    -lo. Mas então também XOR este último bloco com uma chave secreta, K1, que o
  • 6:54 - 6:59
    adversário não sabe. No entanto, se a mensagem é um múltiplo do comprimento do bloco,
  • 6:59 - 7:03
    , então, naturalmente, não acrescentar nada para ele. Mas nós XOR-lo com um diferente
  • 7:03 - 7:07
    chave, K2, que, mais uma vez, o adversário realmente não sei. Então não é que,
  • 7:07 - 7:11
    apenas fazendo isso, agora é impossível aplicar os ataques de extensão que pudéssemos
  • 7:11 - 7:15
    fazer a função de cascata, e em CBC-prima. Porque o pobre
  • 7:15 - 7:19
    adversário realmente não sabe o que é o último bloco que entrou na
  • 7:19 - 7:23
    função. Ele não sabe K1, e, portanto, que não sabe o valor no presente
  • 7:23 - 7:27
    determinado ponto e, como resultado, ele não pode fazer um ataque de extensão. De facto, este é um
  • 7:27 - 7:32
    declaração demonstrável. E para que essa construção aqui é simplesmente XOR-ing
  • 7:32 - 7:36
    K1 ou XOR-ing K2 é realmente um PRF. Apesar de não ter que fazer uma final
  • 7:36 - 7:40
    passo de criptografia após a função prima CBC é computado. Então, essa é uma
  • 7:40 - 7:45
    benefício, que não há criptografia passo final. E a segunda vantagem é que podemos resolver
  • 7:45 - 7:49
    ambigüidade entre este se preenchimento ou preenchimento aconteceu não aconteceu por meio
  • 7:49 - 7:54
    duas chaves diferentes para distinguir o caso em que a mensagem é um múltiplo do bloco
  • 7:54 - 7:59
    comprimento versus o caso em que não há mas não temos uma almofada anexado à mensagem. Assim
  • 7:59 - 8:03
    as duas chaves diferentes resolver este ambiguidade entre os dois casos, e como um
  • 8:03 - 8:07
    resultado, este preenchimento, na verdade é suficientemente seguro. E como eu disse,
  • 8:07 - 8:12
    há realmente um teorema de segurança legal que vai com CMAC que mostra que o
  • 8:12 - 8:16
    construção CMAC é realmente uma função pseudo-aleatória, com a mesma segurança
  • 8:16 - 8:20
    propriedades como CBC-MAC. Então, eu queria mencionar que CMAC é um padrão federal
  • 8:20 - 8:25
    padronizado pelo NIST e se você agora, nestes dias, queria usar um CBC-MAC para
  • 8:25 - 8:29
    qualquer coisa, você realmente estar usando CMAC como a forma padrão para fazê-lo. Mas
  • 8:29 - 8:34
    particularmente em CMAC, a cifra de bloco AES é subjacente e que nos dá uma segura
  • 8:34 - 8:38
    CBC-MAC derivado de AES. Então esse é o final no segmento e no próximo segmento
  • 8:38 - 8:40
    vamos falar sobre um MAC paralelo.
Title:
MAC estofamento (9 min)
Video Language:
English
erickshowplay added a translation

Portuguese, Brazilian subtitles

Revisions