
Protectstar AES Estendido
Tamanho do Bloco: 512 bits (64 bytes)
Tamanhos de Chave: 128, 256 e 512 bits (16, 32 e 64 bytes) (padrão 256 bits)
Modos de Operação: ECB, CBC, CFB, OFB e CTR (padrão CTR)
Número Total de Rodadas: 24
Resumo
Esta documentação explica os detalhes da nossa versão estendida do algoritmo de criptografia AES, que utiliza tamanho fixo de bloco de 512 bits e três possíveis tamanhos de chave, respectivamente 128, 256 ou 512 bits.
1. Motivação
O AES padrão utiliza um comprimento de bloco de mensagem de 128 bits (ou seja, 16 bytes) e chave de 128 bits. Comprimentos de chave de 192 e 256 bits também são suportados pelo AES. Para a combinação 128/128 (Bloco/Chave), o bloco de mensagem e a chave AES podem ser representados como uma matriz 4x4. Cada célula da matriz representa um único byte e 16 (4x4) células correspondem a 16 bytes, que equivalem a 128 bits.
De forma semelhante, para o AES estendido, utilizamos uma matriz 4x16 (4: tamanho da linha, 16: tamanho da coluna) para representar os blocos de mensagem e as chaves das rodadas. O AES estendido utiliza algumas propriedades e funções do AES original exatamente como são (por exemplo, adição da chave da rodada, mistura de colunas, etc), enquanto algumas propriedades e funções são específicas do AES estendido (por exemplo, o número total de rodadas, deslocamento de linhas, etc.).
Nas seções seguintes, as propriedades e funções relevantes usadas no AES original e no AES estendido são explicadas em detalhes.
2. Modos de Operação
Todos os modos de operação suportados pelo AES original (ou seja, Electronic Code Book (ECB), Cipher Block Chaining (CBC), Cipher Feedback (CFB), Output Feedback (OFB) e Counter (CTR)) também foram implementados para o AES estendido.
3. Número Total de Rodadas
Para criptografar e descriptografar um único bloco, o algoritmo AES original aplica suas funções em um total de 10 rodadas. Esse número 10 é calculado com a seguinte fórmula:
Número de rodadas = (tamanho da chave ou do bloco em palavras) + 6
O número constante 6 foi especificado e fixado pelos projetistas do AES, de acordo com os ataques criptográficos conhecidos. Se o tamanho da chave for 256 bits, então são necessárias 14 rodadas (8+6).
Para o AES estendido, o comprimento do bloco é fixado em 512 bits. Isso equivale a 16 palavras porque cada palavra tem 4 bytes. O número total de rodadas é calculado como 22 baseado na fórmula acima. Na verdade, precisamos de mais 2 rodadas devido à operação ShiftRow, conforme explicado nas próximas seções. Como conclusão, o AES estendido aplica 24 rodadas para criptografar e descriptografar um único bloco.
4. Preenchimento (Padding)
A operação de padding é muito comum para preencher blocos de mensagem e blocos de chave para cifras de bloco. Para o AES estendido, precisamos de padding tanto para mensagem quanto para chave.
4.1. Padding da Mensagem
O comprimento das mensagens de entrada deve ser múltiplo de 512 no AES estendido. Para a operação de padding, seguimos o mecanismo descrito na RFC 1321. Nesse método de padding, após o último bit original da mensagem, um bit “1” é inserido e então bits “0” são adicionados até que o último bloco da mensagem tenha comprimento 512. Se não houver espaço para adicionar zeros extras, então um novo bloco de 512 bits é acrescentado ao final da mensagem.
4.2. Padding da Chave
O AES estendido suporta tamanhos de chave de 16, 32 e 64 bytes. Para inicializar o bloco da chave, uma senha fornecida pelos usuários é utilizada. Se a senha não contiver caracteres suficientes para preencher o bloco da chave, os bytes restantes no bloco são preenchidos com zeros. Na verdade, esse padding simples seria suficiente para o AES original, mas não para o AES estendido. Considerando o tamanho da chave de 64 bytes, suponha que a senha componha apenas os primeiros 10 bytes do bloco de chave e os 54 bytes restantes sejam preenchidos com zero. Por outro lado, esse bloco inicial de chave é usado para gerar as chaves das rodadas. Nesse caso, existiriam muitas chaves de rodada cujo valor seria zero, devido ao fato do bloco de chave conter muitos bytes zero. Para prevenir esse problema e evitar gerar muitas chaves de rodada com valor zero, aplicamos a criptografia AES original no bloco de chave com padding de zeros usando uma chave fixa no modo CBC. O resultado da criptografia torna-se a chave preenchida usada para gerar as chaves das rodadas, prevenindo assim o problema dos muitos zeros.
5. Geração das Chaves das Rodadas
As chaves das rodadas são geradas a partir do bloco de chave preenchido, que foi explicado na seção anterior “Preenchimento da Chave”. O processo original de geração das chaves das rodadas (veja a Especificação do Ciframento por Blocos Rijndael, pág. 15) é ligeiramente modificado para o AES estendido, e o seguinte algoritmo é utilizado para gerar as chaves das rodadas:
KeyExpansion(byte Key[4*Nk] word W[Nb*(Nr+1)]) { for(i = 0; i < Nk; i++) W[i] = (key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]); for(i = Nk; i < Nb * (Nr + 1); i++) { temp = W[i - 1]; if (i % Nk == 0 || (i % Nk == 4 && Nk > 6)) temp = SubByte(RotByte(temp)) ^ Rcon[i / Nk]; else if ((i % Nk == 8 || i % Nk == 12) && Nk > 6) temp = SubByte(temp); W[i] = W[i - Nk] ^ temp; } }
6. Funções
O AES original utiliza basicamente 4 funções principais. São elas a operação xor-add entre o bloco de mensagem e a chave da rodada (AddRoundKey), consultas na Sbox (SboxSubstitution), deslocamento das linhas (ShiftRow) e mistura de cada coluna na matriz (MixColumn).
1.1.1. AddRoundKey
Para o processo de adição da chave da rodada, não há diferença entre o AES original e o AES estendido.
1.1.2. SboxSubstitution
O processo de consulta na Sbox também é idêntico no AES original e no AES estendido.
1.1.3. ShiftRow
O processo de deslocamento das linhas é diferente no AES original e no AES estendido. O AES original aplica os deslocamentos {0,1,2,3} para o ShiftRow. Isso significa que, na operação ShiftRow, os bytes na primeira linha não são deslocados. Os bytes na segunda linha são deslocados 1 byte para a esquerda (na criptografia); os bytes na terceira linha são deslocados 2 bytes para a esquerda e, finalmente, os bytes na última linha são deslocados 3 bytes para a esquerda. A operação ShiftRow é aplicada em cada rodada do AES e após duas rodadas a combinação das operações ShiftRow e MixColumn proporcionam uma difusão total sobre a matriz; isso significa que, depois de duas rodadas, cada célula da matriz afeta o valor de todas as outras células da matriz.
Mas se aplicarmos os deslocamentos {0,1,2,3} para o ShiftRow no AES estendido, essa difusão total é alcançada apenas após 5 rodadas, ao invés de 2. Portanto, precisamos encontrar deslocamentos melhores que proporcionem difusão total em poucas rodadas. Para esse propósito, escrevemos um programa (veja com.crypt.test.OptimumShiftRow.java no código fonte distribuído) que calculou os deslocamentos ótimos. O resultado foi que a difusão total só pode ser alcançada após 4 rodadas no AES estendido. Houve muitos candidatos que proporcionaram difusão total em 4 rodadas e escolhemos os deslocamentos {0,1,4,5} para o AES estendido.
1.1.4. MixColumn
A mesma operação MixColumn é aplicada para o AES original e o AES estendido. No AES original, existem apenas 4 colunas, enquanto no AES estendido há 16 colunas.
Baixar código fonte:
Protectstar Extended AES Algorithm (230kb / PDF)
- AES: http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
- Modes of Operation: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
- PKCS #5 v2.1: Password-Based Cryptography Standard (RSA Laboratories, October 5, 2006): ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-5v2/pkcs5v2_1.pdf