Pergunta

Eu usei um bom domínio público Implementação C++ DES antes, mas agora preciso de criptografia simples, básica e rápida para um sistema embarcado.

Não precisa ser inquebrável, mas precisa impedir o hacker casual (ou seja, nada que possa ser usado para dinheiro ou roubo de identidade, mas outras informações pessoais transferidas em cartões de memória que podem se perder ou cair em mãos erradas). ).

Devido à memória limitada deste processador, prefiro algo que possa codificar em partes discretas (512 bytes ou menos).

O projeto não é de código aberto e não usará bibliotecas, o que eu sei que restringe ainda mais as opções - o domínio público é o melhor, mas o BSD/apache/etc provavelmente é aceitável...

Estou hesitante em lançar o meu próprio (como todos deveriam estar).

-Adão

Foi útil?

Solução

Se você está apenas procurando ofuscação, o XOR com uma constante secreta é a implementação mais pequena que você encontrará.Também seria trivial quebrar, já que é vulnerável à análise de frequência para procurar as letras inglesas mais comuns.

Se você precisar de um algoritmo mais forte, recomendo olhar para o baiacu, que tende a ser pequeno e rápido.Ainda requer memória para tabelas, mas esperamos que funcione para sua aplicação.

Bruce Schneier colocou explicitamente o algoritmo Blowfish em domínio público, rejeitando patentes.Você pode obter sua implementação em C (e outras implementações também) em o site dele.Esta fonte não contém um aviso de direitos autorais.Suspeito que o código-fonte também seja de domínio público, mas pode ser necessário verificar um pouco mais.

Outras dicas

RC4 é simples e rápido.

A mesma pessoa que lançou a implementação C++ DES também lançou um Algoritmo de criptografia C Rijndael - Eu deveria ter fuçado um pouco mais o site dele, O Algoritmo de criptografia minúsculo (trabalho acadêmico aqui) também tem uma pegada de implementação C muito pequena.

Baiacu parece bom e é provavelmente o melhor dos três no que diz respeito à segurança.

Começarei com o TEA (pequeno código e consumo de memória), mas embrulho-o para que possa passar para outro algoritmo mais tarde, se necessário.Tem fraquezas notáveis ​​nas suas implementações anteriores, mas para este projecto pode até ser um exagero.

-Adão

Você poderia usar um Gerador de números pseudoaleatórios (PRNG) para gerar uma sequência repetível de palavras, que você então pode fazer um XOR com a palavra correspondente em seu fluxo de dados.(O transmissor e o receptor precisam conhecer antecipadamente os parâmetros usados ​​para gerar a sequência pseudoaleatória.)

Essa abordagem não é inquebrável, mas é um avanço em relação ao uso de uma constante para o XOR - e os PRNGs são muito simples de implementar, normalmente consistindo em uma operação de multiplicação e módulo para cada palavra.

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