Criptografia Numaboa

Na Aldeia

Há 56 visitantes online

2904 registros
2 hoje
6 nesta semana
13 neste mês

Boas vindas: tiagotc

Estatística

Artigos: 863
Artigos lidos: 4121243
Arquivados: 42
Downloads: 417
Baixados: 164259
Glossário: 1199
Bibliografia: 24
JoomlaWatch Stats 1.2.7 by Matej Koval

Visitas de onde?

87,4%Brasil Brasil
9,7%Portugal Portugal
0,8%EUA EUA
0,2%Espanha Espanha
0,1%Japão Japão

Visitantes

Hoje: 1271
Ontem: 1336
Esta semana: 2607
Semana passada: 6313
Este mês: 6074
Mês passado: 56643
Total: 166395

Registro/Login

Para fazer login ou registrar-se

Usuários registrados têm algumas regalias!
XTEA * PDF Imprimir Indique esta página
Avaliação: / 1
PiorMelhor 
Criptografia Numaboa - Cifras de bloco
Escrito por vovó Vicki   
Sex, 08.09.2006 21:38
Índice do Artigo
XTEA *
XTEA em JavaScript
Todas as páginas

Depois da descoberta de fragilidades no TEA, os autores sugeriram algumas modificações no algoritmo.

O algoritmo XTEA

O XTEA (extended TEA, algumas vezes chamado de "tean") foi a resposta dos autores do TEA, David Wheeler e Roger Needham, depois da descoberta de que ataques de Chaves Equivalentes e de Chaves Relacionadas comprometiam a segurança do TEA. O novo algoritmo apresentado tem a seguinte estrutura:

Ciclo do XTEA
1 Ciclo do XTEA = 2 etapas Feistel

O XTEA usa as mesmas operações básicas do TEA (XOR, adição módulo 232 e shifts), mas a ordenação é bem diferente. Para prevenir ataques baseados em chaves, as 4 sub-chaves são misturadas de uma forma menos regular e com uma frequência menor.

A implementação do algoritmo continua sendo fácil. Desta vez vou citar um exemplo usando a linguagem de programação JavaScript:

// use 16 chars of 'password' to encrypt 'plaintext' with xTEA
function encrypt(plaintext, password)
{
  var v = new Array(2), k = new Array(4), s = "", i;

  plaintext = escape(plaintext);  // use escape() so only have single-byte chars to encode 

  // build key directly from 1st 16 chars of password
  k[0] = Str4ToLong(password.slice(0,4));
  k[1] = Str4ToLong(password.slice(4,8));
  k[2] = Str4ToLong(password.slice(8,12));
  k[3] = Str4ToLong(password.slice(12,16));

  for (i=0; i>>5)+z ^ sum+k[sum & 3];
    sum += delta;
    z += (y<<4 ^ y>>>5)+y ^ sum+k[sum>>>11 & 3];
    // note use of >>> in place of >> due to lack of 'unsigned' type in JavaScript
  }
  v[0] = y; v[1] = z;
}

function decode(v, k)
{
  var y = v[0], z = v[1];
  var delta = 0x9E3779B9, sum = delta*32;

  while (sum != 0) {
    z -= (y<<4 ^ y>>>5)+y ^ sum+k[sum>>>11 & 3];
    sum -= delta;
    y -= (z<<4 ^ z>>>5)+z ^ sum+k[sum & 3];
  }
  v[0] = y; v[1] = z;
}

// supporting functions

function Str4ToLong(s) {
  // convert 4 chars of s to a numeric long
  var v = s.charCodeAt(0) +
    (s.charCodeAt(1)<<8) +
    (s.charCodeAt(2)<<16) +
    (s.charCodeAt(3)<<24);
  return isNaN(v) ? 0 : v;
}

function LongToStr4(v) {
  // convert a numeric long to 4 char string
  var s = String.fromCharCode(v & 0xFF, v>>8 & 0xFF, v>>16 & 0xFF, v>>24 & 0xFF);
  return s;
}

function escCtrlCh(str) {
  // escape control chars which might cause problems with encrypted texts
  return str.replace(/[\0\n\v\f\r!]/g, function(c) { return '!' + c.charCodeAt(0) + '!'; });
}

function unescCtrlCh(str) {
  // unescape potentially problematic nulls and control characters
  return str.replace(/!\d\d?!/g, function(c) { return String.fromCharCode(c.slice(1,-1)); });
}


Atualização Sáb, 09.09.2006 14:46