Pergunta

Eu estou olhando para um rápido assimétrica cypher algoritmo para ser utilizado no programa C++.Nosso aplicativo acessa somente leitura de dados armazenados em arquivo (formato personalizado, um pouco semelhante ao alcatrão), e eu gostaria de evitar quaisquer modificações do arquivo de forma assimétrica a criptografia de arquivo de índice (estou ciente de que esta não é uma solução perfeita e dados ainda podem ser extraídos e reembalados usando certas técnicas).

Alguns arquivos individuais dentro do arquivo são criptografados com a cifra simétrica e criptografia de chaves, para eles, são armazenados dentro de um arquivo de índice(cabeçalho).É por isso que eu quero para criptografar o arquivo de cabeçalho de forma assimétrica.

Cypher requisitos:
1) implementação do Algoritmo deve ser independente de plataforma.
2) o Algoritmo deve ser fácil de implementar a mim ou a ele deve estar disponível na biblioteca (com código fonte) que permite estática a vinculação com aplicação proprietária, o que significa que o GPL/LGPL/viral licenças não podem ser usados.MIT/BSD-código licenciado, ou código de domínio público, o que é aceitável.
3) Se a cifra está disponível na biblioteca, idealmente, deveria ter pequeno espaço de memória, e a execução deve ser compacto.Eu prefiro usar C/C++ biblioteca que implementa apenas uma cifra em vez de full-blown para todos os fins de codificação coleção.

Originalmente eu queria usar o RSA, mas parece que ela é simplesmente muito lento para ser útil, e não há muitas alternativas.

Portanto, qualquer orientação sobre o que posso usar?

Foi útil?

Solução

Ok, eu encontrei o que eu tenho procurado, e eu acho que é melhor do que o OpenSSL (para os meus propósitos, pelo menos).

Existem duas bibliotecas:
libtomcrypt ao, que implementa várias cifras fracas (incluindo RSA), e libtommath, que implementa grande nī umero de aritmética.Ambas as bibliotecas estão em domínio público, fácil de hackear/modificar e ter mais simples interface de programação de que o OpenSSL, e (muito) melhor documentação de OpenSSL.
Ao contrário do mais velho domínio público rsa código que eu encontrei antes, libtomcrypt ao pode gerar novas chaves muito rapidamente, pode importar OpenSSL-chaves geradas, e suporta preenchimento.Outra coisa boa sobre a libtomcrypt ao é que ele não tem dependências extra (OpenSSL para o windows quer gdi32, por exemplo) e é menor do que o OpenSSL.

Eu decidi usar o RSA para criptografia, depois de tudo, porque (me parece) não há verdadeiramente assimétrica alternativas.Parece que a maioria das outras codificações (elgamal, elliptic curves) são mais adequados para a criptografia simétrica onde a chave de sessão está a ser criptografada assimetricamente.O que não é adequado para mim.Tais cifras são adequados para a rede de comunicações/chaves de sessão, mas não seria bom usá estático e imutável de dados no disco.

Como para "RSA ser lenta", eu mudei o formato de arquivo um pouco, então, agora, só um pequeno pedaço de dados é criptografada assimetricamente.Falha ao descriptografar este bloco vai se tornar a leitura de arquivo de índice completamente muito difícil, se não impossível.Além disso, devo admitir que a lentidão da RSA foi parcialmente uma impressão errada dada por código antigo Eu tentei usar antes.

O que significa, questão resolvida.Solução RSA + libtomcrypt ao.RSA - porque não há muitas alternativas ao RSA, e libtomcrypt ao - porque ela é pequena e em domínio público.

Outras dicas

OpenSSL deve fazer o trabalho para você. É de código aberto (Licença Apache, atenda aos seus requisitos de licença).

É amplamente utilizado e bem testado.

Use um RSA personalizado para assinar o arquivo. Armazene a chave pública no aplicativo e mantenha a chave privada em casa. Agora, qualquer um poderia modificar o arquivo único de leitura, mas seu aplicativo se recusaria a carregar o arquivo modificado.

Confira a Curve25519, que é a CrytPography da curva elípica implementada com eficiência e em torno de problemas de patentes.

Atende a todos os seus requisitos. Veja aqui.

Você pode usá -lo para criptografar ou simplesmente assinar.

Como uma nota rodapé:

Para verificação de integridade, um Mac deve ser suficiente, a menos que você realmente precise de criptografia assimétrica.

Que tal MD5?

Sim, estou ciente de que o MD5 foi quebrado; - Mas a maioria das aplicações práticas isso é irrelevante.
Especialmente se os dados modificados também teriam que ser válidos no formato de dados específicos, bem como o MD5 correto

EDITAR:
O MD5 é apropriado se você deseja apenas garantir que os dados armazenados não possam ser alterados (ou pelo menos você pode detectá -los), mas não oculta os dados. Observe que, se você precisar ter a chave em seu aplicativo, juntamente com os dados, ele sempre poderá ser extraído. Existem técnicas para ocultar a chave - uma popular é simplesmente colocá -la dentro de um recurso estático, como um ícone que pode ser vinculado facilmente.

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