Question

Je cherche un algorithme asymétrique rapide Cypher à utiliser dans le programme C ++. Notre application a accès aux données en lecture seule stockés dans l'archive (format personnalisé, un peu comme le goudron), et je voudrais éviter toute modification de cette archive en chiffrant asymétriquement index des archives (je suis conscient que ce n'est pas une solution parfaite et les données peuvent encore être extrait et remballé en utilisant certaines techniques).

Certains fichiers individuels dans l'archive sont cryptées avec des clés symétriques cypher et de chiffrement pour les sont stockés dans l'index des archives (en-tête). Ce qui est la raison pour laquelle je veux chiffrer en-tête archives asymétriquement.

exigences Cypher:
1) la mise en œuvre l'algorithme doit être indépendant de la plateforme.
2) L'algorithme doit être soit facile de me mettre en œuvre ou il devrait être disponible dans la bibliothèque (avec le code source) qui permet statique la liaison avec application propriétaire, ce qui signifie que GPL / LGPL / licences virale ne peuvent pas être utilisés. MIT / code sous licence BSD-ou le code de domaine public est acceptable.
3) Si Cypher est disponible dans la bibliothèque, idéalement, il devrait avoir faible empreinte mémoire, et la mise en œuvre doit être compact. Je préférerais utiliser un C / C ++ bibliothèque qui implémente un seul chiffre au lieu de tout usage collection chiffrement complet.

A l'origine je voulais utiliser RSA, mais il semble que il est tout simplement trop lent pour être utile, et il n'y a pas beaucoup d'alternatives.

Alors, des conseils sur ce que puis-je utiliser?

Était-ce utile?

La solution

D'accord, j'ai trouvé ce que je cherchais, et je pense qu'il vaut mieux que OpenSSL (pour mes besoins, au moins).

Il y a deux bibliothèques:
LibTomCrypt , qui met en œuvre plusieurs monogrammes (y compris RSA), et libtommath , qui implémente arithmétique BigNum. Les deux bibliothèques sont dans le domaine public, facile à pirater / modifier et ont une interface de programmation plus simple que OpenSSL, et (beaucoup) mieux que la documentation OpenSSL.
Contrairement domaine public ancien code rsa j'ai trouvé avant , LibTomCrypt peut générer de nouvelles clés très rapidement, peut importer des clés généré OpenSSL, et prend en charge le rembourrage. Une autre bonne chose à propos LibTomCrypt est qu'il ne dispose pas de dépendances supplémentaires (OpenSSL pour Windows veut gdi32, par exemple) et est inférieur à OpenSSL.

J'ai décidé d'utiliser RSA pour le cryptage, après tout, parce que (pour moi, il ressemble), il n'y a pas de solutions de rechange vraiment asymétriques. Il semble que la plupart des autres (chiffrements ElGamal, courbes elliptiques) sont plus appropriés pour le chiffrement symétrique où la clé de session est cryptée asymétriquement. Ce qui ne convient pas pour moi. Ces chiffres sont adaptés pour les clés communications réseau / session, mais il ne serait pas bon d'utiliser pour les données statiques ne changent pas sur le disque.

En ce qui concerne « RSA étant lente », j'ai changé format d'archive un peu, maintenant que petit morceau de données est cryptée asymétriquement. Le défaut de décrypter ce morceau fera index des archives de lecture complètement très difficile, voire impossible. En outre, je dois admettre que la lenteur du RSA était partiellement une mauvaise impression donnée par ancien code J'ai essayé d'utiliser avant.

Ce qui signifie, question résolue. La solution est RSA + LibTomCrypt. RSA - parce qu'il n'y a pas beaucoup d'alternatives à RSA, et LibTomCrypt - parce qu'il est petit et dans le domaine public.

Autres conseils

OpenSSL devrait faire le travail pour vous. Il est open source (licence apache, donc répond à vos exigences de licence).

Il est largement utilisé et bien testé.

Utilisez un RSA sur mesure pour signer l'archive. Rangez la clé publique dans l'application et de garder la clé privée dans la maison. Maintenant tout le monde peut modifier l'archive en lecture seule, mais votre application refuseraient de charger l'archive modifiée.

Vérifiez Curve25519, qui est courbe elliptique crytpography mis en œuvre efficacement, et autour des problèmes de brevets.

Il répond à tous vos besoins. Voir .

Vous pouvez l'utiliser pour chiffrer ou signer simplement.

Comme une note de côté:

Pour vérifier l'intégrité, un MAC devrait suffire à moins que vous avez vraiment besoin de cryptage assymétrique.

Qu'en est-MD5?

Oui, je suis conscient que MD5 a été « cassé; - mais les applications les plus pratiques cela n'a aucune importance
. Surtout si les données modifiées devraient également être valides dans le format de données particulier, ainsi que l'ont MD5 correcte

EDIT:
MD5 est approprié si vous voulez simplement faire en sorte que les données stockées ne peuvent être modifiés (ou au moins vous pouvez le détecter) mais il ne cache pas les données. Notez que si vous devez avoir la clé dans votre application à côté des données, il peut toujours être extrait. Il existe des techniques pour cacher la clé - un populaire est tout simplement de le mettre à l'intérieur d'une ressource statique comme une icône qui peut être liée facilement

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top