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
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