Tópicos

Stream Ciphers

Mesma ideia que o OTP, mas utilizando um keystream generator. A geração deste keystream deve ser reproduzível, como uma espécie de máquina de estados finita.

Ou seja, a sequência gerada deve ser cíclica e o período é o comprimento dessa sequência antes da sua repetição. No entanto, o período deve ser o maior possível (idealmente, sempre maior que o plaintext).

Características da sequência gerada

Pseudo-random

As propriedades da sequência gerada devem ser, estatisticamente, semelhantes à de uma sequência gerada realmente aleatoriamente1.

Imprevisível

Não deve ser possível prever o “próximo bit” depois de observar um dado prefixo da sequência.

Sincronização

  • Síncrona - keystream é independente da mensagem.
  • Auto-sincronizável - é possível recuperar a sincronização quando bits do ciphertext são perdidos.

Cifra síncrona

  • O keystream é independente da mensagem.
  • Perda ou inserção de bits no criptograma resultam em perda de sincronização.
  • Erros de transmissão (bit flipping) apenas afetam a correspondente posição na mensagem original.

Cifra auto-sincronizável

  • Próximo bit é computado a partir dos N últimos bits do ciphertext.
  • É necessário um IV2 para inicializar o processo.
  • Possível problema: vulnerável a replay attacks.

Reutilização de chaves

Tal como no OTP, aqui, a reutilização de chaves é um fator a ter em conta. A encriptação de diferentes mensagens com a mesma chave podem levar à mesma keystream gerada.

Este problema pode ser ultrapassado com recurso a um NONCE, abreviação para “Number used only ONCE”. Um número que nunca deve ser repetido e que não necessita de ser secreto.

Exemplos de Stream Ciphers

ChaCha20 RC4

Block Ciphers

Baseia-se no conceito de processar mensagens de tamanho fixo (um bloco).

Propriedades associadas

  • Difusão - a influência de mudanças no plaintext devem ser espalhadas pelo ciphertext inteiro.
  • Confusão - a relação entre o ciphertext e a chave usada para encriptar deve ser o mais complexa possível de perceber.

Block vs Stream Ciphers

  • Unidade de processamento diferente - block vs bit/byte.
  • Stream Ciphers não promovem a difusão.
  • Operação inversa de uma encriptação através de uma Block Cipher é mais complexa de obter.
  • Stream Ciphers são, por norma, mais rápidas do que Block Ciphers

Padding

Alguns modos de operação requerem que o tamanho do plaintext seja múltiplo do tamanho de um bloco. Assim sendo, é necessário recorrer a padding.

Exemplo: PCKS7.

Modos de operação

Electronic Code Book (ECB)

  • Requer padding.
  • Repetição de blocos é detetável - code book attack.
  • Só deve ser usado para encriptar mensagens que ocupem um só bloco.

Cipher Block Chaining (CBC)

  • O plaintext de cada bloco é masked3 pelo ciphertext anterior, ou seja, existe uma dependência direta entre blocos.
  • Deverá ser utilizado um IV2 inicial, que não necessita de ser secreto.
  • O flip de um bit impacta o bloco atual e um bit, só, no bloco seguinte. Ou seja, alterar o plaintext requer que a encriptação seja toda realizada de novo.
  • O último bloco da cadeia pode ser utilizado como um CBC-MAC. Isto pois, qualquer mudança nos bits do plaintext fazem com que o ciphertext seja alterado de forma completamente não previsível. Neste caso, deverá ser utilizada um IV fixo.
  • Desencriptação pode ser paralelizada, encriptação não, visto que na encriptação o XOR é feito antes.

Cipher FeedBack (CFB)

  • Ao contrário do CBC, o XOR acontece depois sempre.
  • Está sempre em modo de encriptação.
  • Implementa uma Stream Cipher auto-sincronizável.
  • Não necessita de padding.
  • IV deverá ser um NONCE.
  • O keystream depende da chave, do IV e do plaintext anterior.

Output FeedBack (OFB)

  • Está sempre em modo de encriptação.
  • Implementa uma Stream Cipher síncrona.
  • Não necessita de padding.
  • IV deverá ser um NONCE.
  • O keystream, ao contrário do CFB, não depende, de forma alguma, da mensagem.
  • O flip de um bit, no ciphertext, apenas impacta um único bit.
  • Necessita de ser computado sequencialmente.

CounTeR (CTR)

  • Está sempre em modo de encriptação.
  • Implementa uma Stream Cipher síncrona.
  • Não necessita de padding.
  • IV deverá ser um NONCE. Atenção que o NONCE é sempre o mesmo para todos os blocos, mas o contador é incrementado.
  • Tal como no OFB, o keystream não depende da mensagem.
  • O flip de um bit, no ciphertext, apenas impacta um único bit.
  • Pode ser computado paralelamente.

Encriptação Autenticada

Um modo de operação, para Block Ciphers, onde existe a garantia de confidencialidade e integridade. Por norma, possui também um campo “Associated Data”, que não é encriptado, mas é autenticado.

Exemplos de cifras autenticadas

  • EAX (Encrypt-then-Mac-then-Translate)
  • CCM (Counter with CBC-MAC)
  • GCM (Galois/Counter Mode)
  • OCB (Offset CodeBook)

AES

  • Standard definido em 2001
  • Opera sobre blocos de, pelo menos, 128 bits (192 e 256 também suportado)
  • Algoritmo em questão - Rijndael
  • Processo de confusão, como troca de linhas, mix de colunas, substituição de bytes, …

Referências

Modes of Operation - Computerphile AES GCM (Advanced Encryption Standard in Galois Counter Mode) - Computerphile AES Explained (Advanced Encryption Standard) - Computerphile

Footnotes

  1. De relembrar que não é possível, através de uma máquina determinística como um computador, gerar uma sequência realmente aleatória.

  2. IV ou Vetor de Inicialização. 2

  3. Com masked quer-se dizer que é aplicada a operação de XOR bit a bit.