2008-09-06 22 views
9

J'ai déjà utilisé un domaine public C++ DES implementation auparavant, mais j'ai maintenant besoin d'une cryptographie simple, simple et rapide pour un système embarqué. Il n'a pas besoin d'être incassable, mais il doit contrecarrer le pirate occasionnel (c.-à-d. Rien qui pourrait être utilisé pour l'argent ou le vol d'identité, mais d'autres informations personnelles transférées sur des cartes mémoire qui pourraient se perdre ou tomber entre de mauvaises mains).Mise en œuvre de cryptage simple en C

En raison de la mémoire limitée sur ce processeur, je préférerais quelque chose qui peut coder en morceaux discrets (512 octets ou moins).

Le projet n'est pas open source, et ne comptez pas utiliser les bibliothèques, que je connais encore restreint les possibilités - domaine public étant mieux, mais BSD/apache/etc ... probablement acceptable

Je hésite rouler le mien (comme tout le monde devrait l'être).

-Adam

Répondre

7

Si vous êtes à la recherche d'obscurcissement, XOR avec une constante secret est aussi petit une implémentation que vous trouverez. Il serait également trivial de casser, puisqu'il est vulnérable à l'analyse de fréquence pour rechercher les lettres anglaises les plus communes.

Si vous avez besoin d'un algorithme plus fort, je vous recommande de regarder blowfish qui a tendance à être petit et rapide. Il nécessite toujours de la mémoire pour les tables, mais nous espérons que cela fonctionnera pour votre application. Bruce Schneier a explicitement placé l'algorithme Blowfish dans le domaine public, en désavouant les brevets. Vous pouvez obtenir son implémentation en C (et d'autres implémentations) à partir du his site. Cette source ne porte pas d'avis de droit d'auteur. Je soupçonne que le code source est aussi dans le domaine public, mais un peu plus de vérification peut être nécessaire.

2

La même personne qui a publié la mise en œuvre C++ DES a également publié un C Rijndael Encryption Algorithm - j'aurais poussé autour de son site une morsure plus, le Tiny Encryption Algorithm (academic paper here) a également une très faible empreinte C de mise en œuvre.

Blowfish semble bon, et est probablement le meilleur de ces trois en matière de sécurité. Je commencerai avec le TEA (petit code et empreinte mémoire) mais je l'emballerai pour que je puisse passer à un autre algorithme plus tard si nécessaire. Il a des faiblesses notables dans ses implémentations antérieures, mais pour ce projet pourrait même être exagéré.

-Adam

3

RC4 est simple et rapide.

1

Vous pouvez utiliser un Pseudorandom number generator (PRNG) pour générer une séquence répétable de mots, que vous puis XOR avec le mot correspondant dans votre flux de données. (L'émetteur et le récepteur ont besoin de connaître à l'avance les paramètres utilisés pour générer la séquence pseudo-aléatoire.)

Cette approche n'est pas incassable, mais c'est une augmentation par rapport à l'utilisation d'une constante pour le XOR-ing - et les PRNG sont très simple à implémenter, consistant typiquement en une opération de multiplication et de modulo pour chaque mot.