Welcome to Our Website

Criptografia 101: A Criptografia simétrica


Este é o primeiro post de uma parte 3 da série sobre conceitos básicos de criptografia. A série é descrita do seguinte modo:

  1. cifra simétrica
  2. integridade dos dados & cifragem autenticada
  3. cifragem assimétrica com pares de chaves públicos/privados

mergulhar no mundo da ciência da computação pode ser uma tarefa difícil. Especialmente sozinho!, Nesta série de blogs, eu gostaria de oferecer uma visão geral de alto nível sobre os fundamentos da criptografia para aqueles que procuram aprofundar o tópico que não necessariamente sabe por onde começar. Esta visão geral é baseada especificamente em meus principais takeaways da criptografia de Stanford eu curso como ensinado por Dan Boneh, disponível em Coursera.

eu decidi fazer este curso uma vez que eu sou um desenvolvedor blockchain que não veio de um fundo comp-sci tradicional. Eu estudei economia na faculdade mas viered mais para a programação do computador enquanto eu comecei minha carreira., Desde que comecei a codificar, tenho estado numa missão para ficar “mais perto do computador” — para descascar as camadas de abstração que eu gostava como um desenvolvedor da web e entender o que está acontecendo sob o capô. A transição para a criptocurrency e sistemas distribuídos a partir do desenvolvimento da web tem sido um passo Selvagem e maravilhoso nessa direção de muitas maneiras, não menos importante do que estava ficando mais familiarizado com os conceitos de criptografia. No entanto, eu queria uma base mais sólida., Uma vez que é um campo bastante vasto, eu pensei que valia a pena cair $70 para consumir esta informação em um fórum especialmente curada da Universidade de Stanford. Você também pode auditar este curso sem entregar tarefas de graça. As maravilhas da internet!vamos começar.

essencialmente, a criptografia é a prática da comunicação segura na presença de potenciais adversários de terceiros. O conceito de comunicação segura consiste em dois pontos principais:

  1. segurança contra escutas: isto garante a confidencialidade dos dados.,
  2. segurança contra a manipulação de dados: isto garante a integridade de dados, o que significa que ninguém pode manipular os dados que Você enviou e enganar o destinatário para aceitar os dados manipulados como válidos.a confidencialidade dos dados é obtida através da cifragem, que pode assumir duas formas: simétrica e assimétrica.

    • criptografia simétrica utiliza uma única chave que precisa ser compartilhada entre todos os participantes que estão se comunicando.
    • a encriptação assimétrica usa chaves pessoais., Cada participante tem sua própria chave pública e par de chaves privadas para criptografar e descriptografar mensagens ao se comunicar.

    (Nota: Este blogpost irá falar sobre criptografia no contexto da criptografia simétrica. Num posto de seguimento, vamos mergulhar na encriptação assimétrica.)

    Criptografia de Dados: Dois tipos de Cifras

    Criptografia garante a confidencialidade de dados e envolve dois componentes importantes:

    1. Uma chave secreta: No contexto de criptografia simétrica, podemos assumir nossos participantes, Alice e Bob, tem uma chave secreta compartilhada.,
    2. a cipher: a set of algorithms, one for encryption and one for decryption.

    é importante notar que os algoritmos de encriptação e descodificação são conhecidos publicamente. A única coisa em segredo é a chave.dois tipos de cifras são cifras de fluxo e cifras de bloco. Um pré-requisito potencial para a compreensão adequada de ambas as Cifras é o conhecimento de operações bit-wise (operações realizadas em bits). Mais especificamente, o conceito de exclusive-or (XOR). Eu encontrei este blogpost para dar uma explicação muito clara das operações bitwise., Ou você pode tentar entender o conceito de XOR usando a imagem abaixo. Basicamente dois bits são combinados e se eles são diferentes (um 0 e um 1) eles resultam em 1, e se eles são os mesmos, (ambos de 0 ou ambos de 1) eles resultam em 0. A partir de agora, eu vou assumir que o leitor compreenda o conceito de XOR e que a universal notação para o XOR é: ⊕

    Stream Cipher

    Uma cifra de fluxo é uma chave simétrica de codificação, onde o texto sem formatação (em bytes formulário) é XOR bit a bit com a chave (também em bytes formulário) para produzir o texto cifrado criptografado., O mesmo processo é usado para descriptografar o texto cifrado. Dada a natureza da operação XOR, se nós XOR o cifrotexto com a chave, isto resulta de volta com o texto simples original.

    Um astuto leitor pode perceber a partir desta descrição que a chave (rotulado como na ilustração acima como “Cifra de fluxo”) e texto sem formatação deve ter algo muito importante em comum. Isso mesmo! A chave e o texto simples devem ter o mesmo comprimento., Claro que isto não é muito prático.

    para tornar uma cifra de fluxo mais prática, a ideia de um gerador de pseudorandom é introduzida. Um gerador pseudorandom é um procedimento determinístico que leva uma entrada e produz um resultado pseudorandom ainda mais longo. Sendo um procedimento determinístico significa que ele sempre retornará a mesma saída exata se dada a mesma entrada (ou seja, “abc123” resulta em “8474f24e0d72e1b949ffd2…” toda vez)., A palavra pseudorandom significa que enquanto a saída não é realmente Aleatória (uma vez que é determinada com base em uma entrada particular), ela é de fato indistinguível de uma cadeia realmente aleatória. Em outras palavras, dada uma amostra de entradas e saídas, não há pistas de saída que corresponde a uma entrada particular, e vice-versa, portanto, é pseudo-aleatórios. É possível usar a chave secreta compartilhada como a entrada para produzir uma chave pseudorandom ainda mais longa para agir como a chave longa a ser XOR’D com o texto plano igualmente longo.,

    Esta implementação específica de uma cifra de fluxo que temos ilustrado até agora é chamada de “One-time-pad”. Uma característica extremamente importante do One-time-pad é que a chave One-time-pad só pode ser usada uma vez. Uma vez que é usado uma segunda vez, a segurança destas mensagens é comprometida.ilustrado abaixo, encontra-se uma lâmina do percurso. PRG (K) denota a sequência pseudorandom gerada a partir de nossa chave compartilhada K. O símbolo ⊕ denota XOR. c denota cifrotexto. m denota mensagem (ou texto simples).,

    Basicamente, este slide está dizendo que uma vez que a chave é usada duas vezes, podemos XOR os textos cifrados em conjunto, e que é exatamente igual a XOR de marcar os dois textos normais em conjunto. Uma vez que há redundância suficiente em inglês, um atacante experiente pode usar esta informação para recuperar as mensagens completamente.

    para manter uma chave secreta compartilhada, o conceito de um nonce pode ser usado para garantir que nunca repetimos a tecla One-time-pad., Um nonce é um número arbitrário que pode ser usado apenas uma vez em uma comunicação criptográfica. Ao enviar o cifrotexto, o remetente também pode enviar um nonce sobre para ser combinado com a chave secreta para então usar como a entrada para produzir uma chave pseudorandom distinta para cada criptografia.

    (Você pode ter notado o slide acima diz Ataque 1., Como um aparte, para aqueles que se perguntam O Que é o ataque 2, O Ataque 2 é o fato de que enquanto cifra de fluxo oferece confidencialidade de dados, ele não fornece integridade de dados, como definido na primeira seção)

    cifra de bloco

    o segundo tipo de cifra é uma cifra de bloco. Uma cifra em bloco recebe uma entrada de comprimento fixo e cifra iterativamente o texto simples de novo e de novo usando uma chave diferente (uma “chave redonda”) para cada rodada e, finalmente, retorna um cifrotexto do mesmo comprimento. 3DES e AES são dois exemplos de cifras de bloco que levam uma entrada de 48 bits e 128 bits, respectivamente.,

    O slide acima mostra a arquitetura básica de uma cifra de bloco. Você pode ver que um mecanismo de expansão chave é usado para ter uma nova chave para cada rodada. O texto simples, denotado (m) para a mensagem, é criptografado uma e outra vez até que finalmente o cifrotexto correspondente (C) do mesmo comprimento é retornado.

    por uma questão de brevidade, vou cobrir AES neste blogpost., Embora o DES / 3DES seja historicamente significativo, hoje o AES é mais amplamente utilizado e aceito.

    AES é construído como uma Substituição Permutação de Rede. AES opera em um bloco de 128 bits, igual a 16 bytes. Como ilustrado acima na parte superior esquerda, nós escrevemos os 16 bytes como uma matriz 4 por 4. Esta matriz serve como uma estrutura de dados boa para baralhar dados ao redor., Em cada rodada, o processo é o seguinte:

    1. Nós XOR rodada da chave, o primeiro (k0), com a mensagem actual
    2. , em Seguida, passamos por um processo de substituição, onde os blocos de dados são substituídos por outros blocos baseada em uma tabela de substituição (na foto acima (1) ByteSub).
    3. Nós passamos por uma camada de permutação onde os bits são permutados e baralhados em torno(ilustrado acima (2) ShiftRow & (3) MixColumn).depois repetimos este processo durante 10 rodadas.,

    ilustrado acima, você vai notar que a última rodada salta o Passo Da Coluna Mix, XOR é o resultado com a nossa chave final round e produz o nosso texto cifrado resultante. A fim de descriptografar, nós simplesmente revertemos o processo. O curso oferece uma visão geral de alto nível deste processo de criptografia e incentiva os alunos a olhar mais profundamente para ele, se é de interesse para você. Portanto, vou deixar o funcionamento interno da AES nisto. Eu recomendaria que as pessoas olhassem para o procedimento de rede Fiestel de 3DES para uma comparação divertida e contraste de diferentes cifras de bloco.,

    em termos de hardware, desde o lançamento da Intel Westmere, a Intel projetou seus processadores com instruções especiais para a otimização da AES incorporadas diretamente em seu hardware e AMD seguiu o mesmo pouco tempo depois.

    modos de cifra de bloco da operação

    Ao contrário de uma cifra de fluxo, uma cifra de bloco só recebe uma entrada de comprimento fixo. Obviamente queremos lidar com dados maiores que 16 bytes de cada vez. Em seguida, é importante entender os modos de operação sob os quais podemos usar cifras de bloco para criptografar grandes conjuntos de dados., Para aplicar esta cifra de bloco a um grande conjunto de dados, o primeiro modo de operação que pode vir à mente é chamado “Electronic Code Book” (BCE). O BCE divide simplesmente os dados em 16 blocos de bytes e efectua uniformemente a encriptação AES. Pode até ser feito em paralelo. Muito rápido! Mas não é muito seguro.

    É inseguro, porque se um de 16 bytes da mensagem se repete, o texto cifrado também terá dados repetidos., Isto divulga informações sobre os nossos dados a um potencial atacante. Podemos aplicar essa vulnerabilidade ao caso em que estamos criptografando uma imagem com o BCE. Como você pode ver abaixo, é claro que nossa imagem é um tiro na cabeça. Na área fortemente Negra, podemos ver uma silhueta através do cabelo escuro e camisa.

    É importante que nossos esquemas de criptografia são semanticamente seguro., Segurança semântica é o conceito de que se nós temos um cifrotexto que corresponde a um de dois plaintexts diferentes, um adversário não pode adivinhar com melhor probabilidade do que 1/2 qual plantext o cifrotext corresponde. É evidente que o BCE não é semanticamente seguro. A nossa imagem encriptada dá-nos muita informação para adivinhar a sua imagem normal correspondente.

    BCE é um exemplo de um modo de operação de chave única (o que significa que, tal como o bloco de uma vez, uma chave só pode ser usada uma vez). Outro modo de operação de chave única mais seguro é o modo de contador determinístico. Você é livre para investigar por conta própria., Vou passar para os modos seguros de operação que permitem chaves de muitas vezes!

    cifra em bloco (CBC) é um modo de operação que encadeia cada bloco de 16 bytes de texto simples em conjunto através de XOR’ing o texto cifrado do texto simples anterior em nosso texto simples atual antes de executar a cifra em bloco (ou seja, AES). A imagem abaixo, esclarece esse conceito:

    Temos de começar com um random IV., IV significa Vetor de inicialização que pode ser definido como: o valor inicial usado para iniciar algum processo iterado. No caso do CBC, o IV deve ser aleatório (por conseguinte imprevisível), pelo que deve ser único para cada transacção. O primeiro bloco do cifrotexto é simplesmente o randômico IV. para produzir o resto do cifrotexto, primeiro, o randômico IV é XOR’D com o primeiro bloco do texto simples (m). O resultado então é criptografado com a chave redonda k para retornar o primeiro bloco de cifrotexto cifrado (c)., Esse cifrotexto então recebe XOR’D com o próximo bloco de texto simples (m), o resultado é criptografado com a chave redonda k e retorna o segundo bloco de cifrotexto cifrado (c). O processo é continuado até que todos os blocos tenham sido criptografados.

    Para descriptografar, nós apenas inverter o processo.

    Um componente importante para a encriptação CBC é que o Aleatório IV é imprevisível., Se a IV se tornar previsível, o nosso esquema de encriptação torna-se vulnerável a ataques de texto simples escolhidos. Ataque de texto simples escolhido (CPA) é um modelo de ataque que pressupõe que o atacante pode obter cifrotextos para plaintexts arbitrários, e usá-los para revelar informações sobre mensagens criptografadas. Por conseguinte, é necessário um IV imprevisível para garantir a segurança da CPA.

    tenha paciência comigo aqui enquanto tento explicar como este ataque funcionaria: é possível realizar um ataque de texto simples escolhido na presença de IV previsíveis por causa da natureza de XOR., Se você XOR o mesmo valor em conjunto (0101 01 0101) ele será sempre igual a 0, por isso cancela. Por isso, se você suspeitar de uma observado texto cifrado c corresponde a um determinado texto sem formatação m você pode testar sua hipótese com o previsível IV. Se o texto simples em questão foi criptografado com IV1 tais que c = E(k, m ⊕ IV1) você pode enviar um novo texto sem formatação a ser criptografado e veja se você obter um resultado correspondente: c. Uma vez que você pode prever o IV será IV2, submeter m ⊕ IV1 ⊕ IV2., O CBC processo XOR esta entrada com o próximo IV, IV2, tais que: c = E(k, m ⊕ IV1 ⊕ IV2 ⊕ IV2), portanto, IV2 cancela, e mais uma vez estamos a criptografia de mensagens de E(k, IV1 ⊕ m), que seria o resultado mais uma vez com c e se isso acontecer, nós fomos capazes de adivinhar qual foi previamente criptografados com IV1.

    trabalho realmente incrível se você passou por isso – ^

    com isso, eu gostaria de rever mais um modo de cifra de bloco de operação que irá concluir o primeiro blogpost nesta série de 3 partes. Se foi um grande esforço para fazê-lo tão longe, agora pode ser uma boa hora para uma pausa rápida antes de continuar!,

    Ok, então nós revisamos BCE, CBC, e suas vulnerabilidades, mas por último, e provavelmente mais importante eu vou introduzir o modo de contador aleatório (CTR). Este é o mais recente e mais seguro modo de operação, e também é mais eficiente do que o CBC.

    Randomizados Modo de Contador também leva um aleatório IV. IV serve a um propósito diferente aqui. Nossa chave é combinada (ex., via AES) com uma versão iterada nosso IV: acima continuamos adicionando 1 ao nosso IV para cada iteração, ou então obteríamos um resultado repetido. Fazemos isto até Termos um bloco, desde que seja a nossa mensagem. Assim como a cifra one-time-pad stream, nós agora XOR nossa mensagem de texto simples com nosso pseudorandom pad para resultar em um cifrotexto. Se o seu hardware tem vários motores AES, isto é ultra eficiente porque é parallelizável. Em CBC, cada cifrotexto dependia do bloco anterior de cifrotexto de modo que era impossível paralelizar.,

    Nós nem precisamos necessariamente de uma cifra de bloco para combinar nossa IV e chave em um bloco pseudorandom pad. As cifras de bloco devem ser reversíveis. Se você olhar de perto para a mecânica do modo de contador aleatório, você vai notar que a decriptação não requer que invertamos F(k, IV) . Dada a natureza do XOR, tudo o que precisamos fazer é regenerar o mesmo pseudorandom pad e XOR com o nosso cifrotexto. Portanto, para descodificar, temos de repetir a operação, não revertê-la.,

    Abstratamente falando (até agora eu tenho evitado conceitos abstratos), o que significa que o procedimento que usamos para combinar a nossa chave secreta e IV F(k, IV) deve ser uma Função Pseudo (PRF), por oposição a uma Pseudo-Permutação (PRP). Nós realmente temos aplicado esses conceitos ao longo deste blogpost. Tanto PRPs quanto PRFs são procedimentos determinísticos que, dada uma entrada particular, resultam em uma saída pseudorandom. (isto é, AES, XOR). No entanto, um PRP é mais rigoroso no sentido de que deve ser reversível., Na verdade, os Termos PRP e cifra de bloco (como AES) são frequentemente usados sinônimos. No entanto, uma PRF não necessita de ser reversível. Se você retornar aos slides anteriores exibidos neste post, agora você vai entender a notação PRF e PRP.

    isso conclui a minha visão geral da encriptação simétrica! Cobrimos as cifras do fluxo e as cifras do bloco. Então, uma vez que as cifras de bloco só podem ser realizadas em cerca de 16 bytes de cada vez, nós cobrimos os modos de operação usados para executar cifras de bloco em grandes plantexts. Também esclarecemos os conceitos de PRPs vs PRFs.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *