O algoritmo TEA foi criado por David Wheeler e Roger Needham no laboratório de computação da Universidade de Cambridge, Inglaterra, em novembro de 1994. A idéia principal dos autores foi criar um algoritmo seguro que, ao mesmo tempo, fosse fácil de ser implementado nas mais diversas linguagens de programação, pequeno e por isto facilmente guardado de memória pelos programadores, de execução rápida e que consumisse poucos recursos das máquinas. Parece que conseguiram… Também é importante frisar que este algoritmo não é patenteado (domínio público).

Este texto trata apenas da primeira versão do TEA, um algoritmo do tipo Feistel que faz uso de operações de vários grupos algébricos – XOR, ADD e SHIFT. Esta é uma forma muito engenhosa de obter as propriedades de difusão e confusão, os dois componentes essenciais da segurança da cifra, sem a necessidade de usar P-boxes (caixas de permutação para gerar difusão) ou S-boxes (caixas de substituição para gerar confusão).

O TEA cifra blocos de 64 bits de dados usando uma chave de 128 bits. Parece ser bastante resistente à criptoanálise diferencial e adquire uma difusão completa (quando a diferença de um bit no texto claro causa aproximadamente 32 bits de diferença no texto cifrado) após seis ciclos. Por ser muito curto e simples, a velocidade de processamento impressiona.

De acordo com os autores, este algoritmo pode substituir o DES com vantagens. Além disso, apesar de ter 32 ciclos (64 etapas Feistel) e apesar da velocidade de processamento não ser o principal objetivo, o TEA é três vezes mais rápido que o melhor software de implementação de DES com 16 etapas. Todos os modos de uso do DES também são aplicáveis ao TEA. O número de ciclos pode variar ou até fazer parte da chave. Os autores também sugerem que a segurança pode ser aumentada quando se aumenta o número de iterações.

De acordo com o Prof. Simon Shepher, da Universidade de Bradford, Inglaterra, a segurança do TEA é muito boa, salientando que, até o momento (fevereiro de 2006), não se obteve sucesso com nenhum tipo de criptoanálise. Acredita-se que o TEA seja tão seguro quanto o algoritmo IDEA, projetado por Massey e Xuenjia Lai. Usa a mesma técnica de grupos algébricos misturados, mas é muito mais simples e, por isto mesmo, muito mais rápido. Além disso é de domínio público, enquanto que o IDEA foi patenteado pela Ascom-Tech AG na Suíça. Parece que o professor é um fã de carteirinha do TEA. Louva seu tamanho diminuto, sua velocidade, sua segurança e ressalta que “também é um ótimo gerador de números randômicos que pode ser usado em simulações Monte Carlo e afins”.

abaixo um exemplo do algaritmo em PHP:

 


class crypto{

var $keyPhrase = "";
var $input = "";
var $output = "";

function encryption_keyer($txt, $encrypt_key) {
$ctr = 0;
$tmp = "";
$txt_len = strlen($txt);

for ($i = 0; $i < $txt_len; $i++) {
if ($ctr == strlen($encrypt_key)) $ctr = 0;
$tmp .= substr($txt, $i, 1) ^ substr($encrypt_key, $ctr, 1);
$ctr++;
}

return $tmp;
}

function encrypt_string() {
$txt = $this->input;
$key = $this->keyPhrase;

srand((double)microtime()*1000000);
$encrypt_key = md5(rand(0,32000));
$ctr = 0;
$tmp = "";
$txt_len = strlen($txt);

for ($i=0; $i < $txt_len; $i++) {
if ($ctr == strlen($encrypt_key)) $ctr = 0;
$tmp.= substr($encrypt_key, $ctr, 1) . (substr($txt, $i, 1) ^ substr($encrypt_key, $ctr, 1));
$ctr++;
}

$hash = $this->encryption_keyer($tmp, $key);
$hashLen = strlen($hash);
$hexa = "";

for ($j=0; $j < $hashLen; $j++) {
$tmpH = base_convert((ord(substr($hash, $j, 1))), 10, 16);
$hexa .= (strlen($tmpH) < 2) ? "0$tmpH" : "$tmpH";
}

$this->output = $hexa;
}

function decrypt_string() {
$txt = $this->input;
$key = $this->keyPhrase;

$hexaLen = strlen($txt);
$hash = "";

for ($j = 0; $j < $hexaLen; $j++) {
$tmpHex = substr($txt, $j, 2);
$tempOrd = base_convert($tmpHex, 16, 10);
$hash .= chr($tempOrd);
$j++;
}

$hashd = $this->encryption_keyer($hash, $key);

$tmp = "";
$txt_len = strlen($hashd);

for ($i = 0; $i < $txt_len; $i++) {
$md5 = substr($hashd, $i, 1);
$i++;
$tmp .= (substr($hashd, $i, 1) ^ $md5);
}

$this->output = $tmp;
}
}

$k = new crypto();
$k->keyPhrase = "pedrofilho";
$k->input = "Jesus o rei dos reis";
$k->encrypt_string();
$dest = $k->output;

echo "texto *Jesus o rei dos reis* com criptografia TEA com *pedrofilho* como senha:\n\n" .$dest;

$w = new crypto();
$w->keyPhrase = "pedrofilho";
$w->input = $dest;
$w->decrypt_string();
$dest = $w->output;

echo "\n\n" .$dest;

o mais legal desse algoritmo é a velocidade.