Pergunta

Eu preciso de uma muito, muito rápido one-to-one algoritmo. O algoritmo não precisa ser inquebrável. Razoavelmente forte é o suficiente, mas deve ser muito rápido. I será implementação em hardware. Área é uma preocupação, também, por isso não deve usar muito lógica.

Deve ser uma função f_n (x), cuja entrada é um número de n bits e cuja saída é um número de n bits. N é uma constante, provavelmente entre 20-70. A função deve ser um-para-um. (Isto é invertível, o que significa que a descriptografia é possível. Descriptografia velocidade é irrelevante.)

Eu preciso criptografar em menos 3NS, que é de cerca de 333m entradas por segundo. DES, por exemplo, faz cerca de 50Mbits por segundo. Eu preciso 333m entradas por segundo.

Até agora eu tenho usado uma cifra de Feistel com cerca de 6 rodadas. Que parece ter cerca de 3ns.

Sugestões?

Mais notas

Houve algumas perguntas, então eu vou explicar. Eu preciso colocar as chaves em uma tabela hash. O método padrão para hash é a chave de entrada e utilizar o resultado como um índice para uma tabela. Cada linha da tabela deve armazenar a chave original. teoria da informação nos diz que as linhas da tabela na verdade, não precisa ser tão grande como a chave de entrada, mas sim como ampla como a chave de entrada menor o número de bits no endereço da tabela. Por exemplo:

  • de entrada: x (N bits)
  • de hash: x% 128 (8 bits)
  • verificador: floor (x / 128) (N-8 bits)

Seria tolo em uma CPU, onde inteiros são geralmente a mesma largura, mas eu estou fazendo isso em hardware.

x 128% é um hash fáceis de quebrar. Na verdade, se as chaves de entrada diferem apenas nos primeiros poucos bits, você vai ter quebrado o hash no acidente. Eu quero um hash que não será quebrado no acidente e pode até ser difícil de quebrar de propósito. Eu também tentei um LFSR . LFSR são rápidos, mas dois LFSR de igual comprimento gerar resultados hash que são correlacionados de forma linear. (Se f (x) e g (x) dão o mesmo hash para dois polinómios diferentes, f (x + 1) e g (x + 1) são facilmente correlacionados.)

Portanto, preciso de uma função com a entrada de N-bits e V bits, a saída bit H (V + H = N), onde é difícil encontrar duas entradas de comprimento N de modo a que tanto a produção vontade o mesmo H. criptografia cabe a conta em que ele deixa a saída do mesmo comprimento que a entrada e é difícil de inverter. Algo diferente de trabalho criptografia poder, também, embora parece que o que eu quero é quase a própria definição de criptografia.

Desculpe por não explicar tudo isso na frente. Espero que isso esclarece as coisas.

Foi útil?

Solução

Quando você diz "rápido" você só se preocupa com o rendimento, ou é latência-se da maior importância?

Se a latência não é tão importante quanto o rendimento, há qualquer razão para que você não pode usar um padrão cifra Feistel que é conhecido por ser seguro, e em vez de ter o número total de rodadas (por exemplo, como 16 em Blowfish) saída lógica de combinações, furar um registo entre cada rodada, de modo que você gasoduto o algoritmo de criptografia ? Seria exigem essencialmente a mesma quantidade de hardware (um pouco mais a acrescentar alguns flip-flops para registros) como um algoritmo de criptografia seguro conhecido, mas o atraso de propagação só seria a de uma rodada da rede Feistel + o atraso de propagação de o flip-flops.

Outras dicas

Eu estou querendo saber se você não está preocupado com a força da criptografia, então talvez você não precisa ser a criptografia em tudo. O mais parte importante de um algoritmo de criptografia é que é força. Se a criptografia é fraco, então você não está fazendo nenhum bem, criptografando em primeiro lugar.

Aqui estão alguns benchmarks com alguns algoritmos: http: / /gd.tuwien.ac.at/privacy/crypto/libs/cryptlib/benchmarks.html

Note que esses parâmetros estão testando implementações de algoritmos, por isso pode não ser o que você está procurando.

Eu recomendaria o meu velho amigo, o minúsculo Encryption Algorithm

É rápido e extremamente baixo sobre a pegada, o que provavelmente você também tem que considerar ao implementar em hardware.

O seguinte não satisfazer a sua exigência de uma função um-para-um, mas talvez fosse de uso se a velocidade é primordial. (Se ele não vai funcionar, então eu sugiro a dividir e conquistar rota: você está trabalhando em hardware, por isso, teoricamente, você deve ser capaz de criptografar e descriptografar em paralelo, a menos que a criptografia de uma entrada é dependente de criptografias entradas anteriores. )

Apenas sobre o mais rápido hardware algoritmo para o que eu chamaria de "munging" é tratar suas entradas conceitualmente como um bitstream, e XOR-los com a saída de fluxo contínuo de um gerador de criptografia segura e pouco reconstructable - - reconstructable se desejar para decifrá-lo. Um exemplo que é simples e extremamente rápido, mas por si só não é seguro, é um deslocamento linear com realimentação registo (LFSR). Escolha um longo período (2 128 - 1 ou 2 256 - 1 ou algo parecido). A página da Wikipedia sugere modificações para aumentar a segurança. Também poderia tentar ocasionalmente (por exemplo, uma vez a cada M bits, onde M = 4096, 16384, 65536, qualquer que seja) XORing o estado do LFSR com a saída de um fluxo de bits mais lento mas mais seguro (ou uma cifra de fluxo, ou um um bloco de cifra criptografar conjunto predeterminado de insumos, por exemplo, uma sequência de incrementar, ou um instantâneo atraso do estado LFSR) - embora este cai na nem-inventar-o seu próprio-técnica criptográfica, a idéia sendo que as técnicas criptográficas conhecidas tiveram grande quantidades de energia investida em testar se eles têm vulnerabilidades.

O que há de errado com o uso de um valor de 64-bit "chave" e xor-ing cada byte? Você pode percorrer a tecla quantas vezes for necessário para xor todos os bocados de texto puro após a primeira 64.

Uma chave de 64 bits pode ser uma senha de 8-char ou um hash de 8 bytes de uma senha.

Uma vez que a chave tem quase tantos bits como a mensagem, ele vai realmente ser bastante forte e extremamente rápido.

Se você está fazendo isso em hardware por que você não apenas usar uma cifra de bloco padrão em um DSP?

Quão bem high-end DSPs Adequado para a AES algoritmos?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top