Pedro Filho

Blog do programador e tecnico em redes ….

Sobre o algoritmo TEA

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

function cripto($action, $texto, $senha) {
$dest = ”;

if($action == “E”) {

$k =new crypto();
$k->keyPhrase = $senha;
$k->input = $texto;
$k->encrypt_string();
$dest = $k->output;
}

if($action == “D”) {

$w =new crypto();
$w->keyPhrase = $senha;
$w->input = $texto;
$w->decrypt_string();
$dest = $w->output;

}

return $dest;
}

$cript = cripto(“E”, “jesus salva”, “senha”);
$decript = cripto(“D”, $cript, “senha”);

echo “Texto jesus salva com criptografia TEA com <b>senha</b> como senha:<br />”.$cript;
echo “<br />”.$decript;

?>

VRRP no MikroTik

A execução virtual do protocolo da redundância do router (VRRP). O protocolo de VRRP é usado para assegurar o acesso constante a alguns recursos. Dois ou mais routeres (consultados como routeres de VRRP neste contexto) criam o conjunto disponível da altamente – (igualmente consultado como routeres virtuais) com falha dinâmica sobre. Cada router pode participar em não mais de 255 routeres virtuais por a relação. Muitos routeres modernos suportam este protocolo.As instalações da rede com conjuntos de VRRP fornecem a disponibilidade elevada para routeres sem usar certificados.

Descrição

O protocolo virtual da redundância do router é um protocolo da eleição que forneça a disponibilidade elevada para routeres. Um número de routeres podem participar em uns ou vários routeres virtuais. Uns ou vários IP address podem ser atribuídos a um router virtual. Um nó de um router virtual pode estar em um dos seguintes estados:

  • Estado MASTER, quando o nó responder a todos os pedidos aos IP address do exemplo. Pode somente haver um nó MESTRE em um router virtual. Este nó emite pacotes da propaganda de VRRP a todos os routeres alternativos (que usam o endereço do multicast) cada ocasionalmente (ajuste na propriedade do intervalo).
  • Estado BACKUP, quando o router de VRRP monitorar a disponibilidade e o estado do router mestre. Não responde a nenhuma pedidos aos IP address do exemplo. Deve dominar tornado não disponível (se três pacotes seqüenciais de VRRP são perdidos pelo menos), o processo eleitoral acontece, e o mestre novo é proclamado baseou em sua prioridade. Para mais detalhes em routeres virtuais, veja RFC2338.

Obs:

VRRP não trabalha atualmente em relações de VLAN, porque é impossível ter o MAC address de uma relação de VLAN diferente do MAC address da relação que física é colocar sobre.

VRRP Routers

Sub-menu em nível: vrrp de /ip

Descrição

Um número de routeres de VRRP podem dar forma a um router virtual. O número máximo de conjuntos em uma rede é 255 cada que têm um VRID original (identificação virtual do router). Cada router que participa em um conjunto de VRRP deve tê-lo jogo de prioridade a um valor válido.

authentication (nenhuma | simples | ah; defeito: nenhuns) – método de autenticação usar-se para pacotes da propaganda de VRRPnone – nenhuma autenticação
simple – autenticação do texto liso
ah – encabeçamento da autenticação usando o algoritmo HMAC-MD5-96
interface (nome) – nome que da relação o exemplo está funcionando sobre

interval (inteiro: 1..255; defeito: 1) – intervalo da actualização de VRRP nos segundos. Define como freqüentemente o mestre do conjunto dado emite pacotes da propaganda de VRRP

name (nome) – nome atribuído do exemplo de VRRP

on-backup (nome; defeito: “”) – script para executar quando o interruptor do nó ao estado alternativo

on-master (nome; defeito: “”) – script para executar quando o interruptor do nó para dominar o estado

password (texto; defeito: “”) – a senha exigida para a autenticação dependendo do método usado pode ser ignorada (se nenhuma autenticação usada), corda de texto longa de 8 caráteres (para a autenticação do plain-text) ou corda de texto longa de 16 caráteres (128-bit fecham exigido para AH a autenticação)

preemption-mode (sim | não; defeito: sim) – se a modalidade do preemption está permitidaNo. – um nó alternativo não será elegido para ser um mestre até a falha mestra atual mesmo se o nó alternativo tem uma prioridade mais elevada do que o mestre atual
Yes. - o nó mestre tem sempre a prioridade

priority (inteiro: 1..255; defeito: ) – prioridade 100 do nó atual (prioridade mais elevada do meio dos valores mais elevados) 255 – O RFC exige que o router que possui os IP address atribuídos a este exemplo teve a prioridade de 255

vrid (inteiro: 0..255; defeito: 1) – identificador virtual do router (deve ser original em uma relação)

nos proximos post’s continuo….

Sobre o Blowfish

Muitos estudiosos em criptografia examinaram o Blowfish, entretanto,ainda são poucos os resultados publicados. Serge Vaudenay examinouchaves fracas no Blowfish: existe uma classe de chaves que podem serdetectadas – mas não “quebradas” – no Blowfish com variantes de 14iterações ou menos.

Qualquer pessoa pode obter uma cópia do codigo-fonte do Blowfish apartir da internet e fazer uso em suas aplicações. Não há regras de usodo código. Bruce Schneier pede, somente, que seja notificado deaplicações comerciais para que possam ser listadas em sua página naInternet.

No site oficial, pode se obter o codigo para C, C++, Perl, JAVA eoutras linguagens e na web em geral encontra-se para JavaScript, PHPentre outras tudo livre.

Descrição do Algoritmo

A criptografia é feita através de uma função com 16 iterações.Apesar do complexo algoritmo de inicialização, o Blowfish tem grandeeficiência com os microprocessadores atuais. A cifragem do texto éfeita em blocos de 64 ou 128 bits, nos quais os bits não são tratadosseparadamente, mas em grupos de 32 bits. A fim de aumentar suaeficiência, foi escolhido usar na confecção deste algoritmo funçõessimples para os microprocessadores, tais como XOR, adição emultiplicação modular. O algoritmo consiste de duas partes, sendo elasa expansão da chave e a criptografia dos dados. A primeira consiste natransformação da chave em subchaves, totalizando 4168 bits. A segundaconsiste de 16 fases, sendo que, em cada uma dessas, é feita umapermutação dependente da chave e uma substituição dependente da chave edos dados.

Criação das sub-chaves

A matriz P consiste de 18 subchaves de 32 bits, com seus elementosvariando de P1 ate P18. Utilizam-se também 4 s-boxes, cada umaconstituída de 256 elementos de 32 bits cada. Inicialmente, as S-boxessão preenchidas com os dígitos hexadecimais de PI, exceto o dígitoinicial 3. O bit mais significativo da fração de Pi se torna o maissignificativo da primeira subchave. Como exemplo:

· P1 = 0×243f6a88

· P2 = 0×85a308d3

· P3 = 0×13198a2e

· P4 = 0×03707344

Em seguida, faz-se um XOR entre os 32 primeiros bits da chave comP1, os próximos 32 bits da chave com P2, e assim por diante, até P14.Caso os bits da chave cheguem ao fim antes de P14, então se deverepeti-los até o fim da matriz.

· Ex: Chave de 64 bits.

Após isso, usando-se uma cadeia de caracteres de constituída apenaspor zeros, executa-se o algoritmo usando as sub-chaves já criadas. Oresultado desse processo deve ser armazenado em P1 e P2, e em seguidaservirá de entrada para o algoritmo novamente. Esse novo produto seráarmazenado em P3 e P4, e servirá mais uma vez de entrada, ate que sejampreenchidas todas as subchaves e S-boxes.

No total, serão feitas 512 iterações apenas para gerar assub-chaves. A fim de tornar a utilização do algoritmo mais simples, ésugerido que os aplicativos guardem essas sub-chaves geradas, ao invésde fazer esse complexo processo múltiplas vezes.

Cifragem

A entrada para essa parte do algoritmo são 64 bits, que serãodivididos em dois grupos de 32 bits, que serão chamados de xL e xR. Asoperações abaixo deverão ser feitas 16 vezes.

· xL = xL XOR Pi

· xR = F(xL) XOR xR

· Troca de xL com xR

Após a décima sexta iteração, é necessário trocar xL e xR mais umavez (troca de xL e xR). Em seguida, são feitas as seguintes operações:

· R = xR XOR P17;

· xL = xL XOR P18.

O texto cifrado será a união desses dois grupos (xLxR). A função F segue os seguintes passos:

· 1)Separar xL em quatro blocos de 8 bits. O primeiro bloco será usado comoentrada para achar uma entrada na primeira S-Box, o segundo na segunda,e assim sucessivamente. Em seguida são feitas duas adicões em módulo de232 e um Xor da seguinte forma:(S1 (B1) + S2(B2)) XOR (S3(B3) + S4(B4))

O processo de obtenção do texto original a partir do cifrado é feitoda mesma forma, porém utilizando a matriz P em ordem inversa.

Conclusão

Blowfish é uma das cifras mais rápidas em uso, exce(p)to ao mudarchaves. Cada chave nova requer o pre-processamento equivalente aencriptação de aproximadamente 4 kilobytes do texto, o que é muitolento se comparado a outras cifras. Isto impede seu uso em determinadasaplicações, mas não é um problema em outras. Em algumas aplicações érealmente um benefício: o método da troca de senha usado em OpenBSD usaum algoritmo derivado de Blowfish que emprega a programação de chavelenta; a idéia/ideia é que o esforço computacional extra requerido dá aprote(c)ção de encontro aos ataques de dicionário. Em algumasexecuções, Blowfish tem uma exigência relativamente grande da memória(acima de 4 kilobytes). Este não é um problema mesmo para computadoresmenores e mais velhos ou laptops, mas impede o uso em sistemas menorestais como smartcards.