O Curupira-2 é um cifrador de bloco involutional desenvolvido para plataformas com recursos limitados (sensores, dispositivos móveis, IoT), baseado no paper de Simplício Jr. et al. (PiLBA 2008).
| Parâmetro | Valor |
|---|---|
| Tamanho do bloco | 96 bits (12 bytes) |
| Tamanhos de chave | 96, 144 e 192 bits |
| Número de rodadas |
|
| Estrutura | Wide Trail Strategy |
O estado interno é organizado como uma matriz
Memória:
A estrutura de rodada é composta por quatro transformações:
Aplica a S-Box
Permuta os bytes dentro de cada coluna segundo a regra:
Multiplica cada coluna pela matriz MDS
Para cada coluna
XOR do estado com a chave de rodada
-
Rodada de branqueamento:
$\sigma$ com$\kappa^{(0)}$ -
Rodadas intermediárias:
$\gamma \rightarrow \pi \rightarrow \theta \rightarrow \sigma$ -
Rodada final:
$\gamma \rightarrow \pi \rightarrow \sigma$
A chave é tratada como um elemento do corpo finito
-
$t = 2$ para chaves de 96 bits (12 bytes) -
$t = 3$ para chaves de 144 bits (18 bytes) -
$t = 4$ para chaves de 192 bits (24 bytes)
A chave é representada como um vetor de bytes:
Para cada tamanho de chave, um pentanômio primitivo
As constantes de agenda
Apenas o byte mais significativo (
A evolução da chave é definida como:
Para 96 bits (12 bytes):
Para 144 bits (18 bytes):
Para 192 bits (24 bytes):
Onde:
A chave de rodada efetiva
Apenas os 12 bytes menos significativos de
Modo autenticado que combina cifragem e autenticação baseado no algoritmo descrito no paper.
Operações:
SetIV(iv): inicializa com vetor de inicializaçãoUpdate(aData): processa dados autenticadosEncrypt(mData, cData): cifra mensagemDecrypt(cData, mData): decifra mensagemGetTag(tag, tagBits): obtém o tag de autenticação
Função MAC baseada no Curupira, utilizada internamente pelo LetterSoup.
Operações:
Init(): inicializa com chaveInitWithR(R): inicializa com valor RUpdate(aData): processa dadosGetTag(tag, tagBits): obtém o MAC
- Efeito avalanche: Mudança de 1 bit no plaintext afeta aproximadamente 50% dos bits do ciphertext
- Efeito avalanche na chave: Mudança de 1 bit na chave afeta aproximadamente 50% dos bits do ciphertext
-
Chaves de rodada: Todas as
$R+1$ chaves de rodada são distintas entre si - SCT determinístico: Square Complete Transform produz o mesmo resultado para a mesma entrada
A implementação segue rigorosamente a especificação do paper, com:
- Interface
cipher.Blockdo Go - Suporte a todos os tamanhos de chave (96, 144, 192 bits)
- LetterSoup e Marvin incluídos
- Testes de propriedades criptográficas (efeito avalanche, chaves de rodada, etc.)
Implementação baseada estritamente no paper "The Curupira-2 Block Cipher for Constrained Platforms: Specification and Benchmarking" (PiLBA 2008). Aguardando vetores de teste oficiais dos autores para validação completa. Vetores Fornecidos.
