2010-11-25 34 views
1

Actuellement je travaille sur un projet embarqué. Le côté client est un MCU 8bits et le côté serveur est un ordinateur.Comment un microcontrôleur de faible puissance peut-il s'authentifier auprès d'un serveur?

Dans le cadre de l'objectif, je veux minimiser les chances des gens copient notre produit. Pendant la phase d'initialisation, le serveur envoie son numéro de série au client et le client fait un calcul simple avec son numéro de série puis renvoie le résultat au serveur. Le serveur vérifie le résultat à une valeur pré-calculée, codée en dur, si le client est authentique.

Le problème est le numéro de série a calculé que renvoyé au serveur est toujours fixe. Toute entreprise de copie peut le comprendre assez facilement avec un analyseur logique. Je veux rendre le numéro de série de transmission semble bits aléatoires de temps en temps, mais être toujours en mesure de décrypter à sa valeur d'origine. A good example using AES encryption (notez chaque fois que vous appuyez sur la chiffrez bouton un texte apparemment aléatoire est généré, mais comme vous le déchiffrer, il revient au texte original.)

En raison de ROM/RAM et limitation de puissance du processus 8bits MCU Je ne peux pas y intégrer une routine AES complète, donc AES est hors de question. Existe-t-il un algorithme simple et efficace juste pour randomiser la transmission?

+0

côté serveur est le codage dans le client C# – wei

+0

(8bits MCU) côté est le codage en C avec la bibliothèque de mathématiques et véritable générateur de nombres aléatoires (TRNG) disponibles. – wei

Répondre

1

Utilisez une paire de clés. Lors de l'initialisation:

  • client dit serveur "Je suis en ligne"
  • Server crypte un message de vérification, que seul le client sera en mesure de décoder
  • client renvoie le message déchiffré

La clé du serveur ne doit pas être codée en dur - elle peut être générée en fonction d'un horodatage (seule une réponse dans une plage acceptable est acceptée) ou les codes peuvent être générés selon les besoins avec un délai d'attente pour les empêcher d'être stocké pour un long terme.

0

que le serveur soit envoyer un compteur augmentant ou de façon monotone-un horodatage au client, à côté du numéro de série. Le client inclut ensuite cela dans le calcul qu'il effectue. Parce que le serveur envoie toujours une requête différente, la réponse sera toujours différente (bien sûr, si le marché est assez lucratif, vos concurrents peuvent toujours désassembler votre code MCU et trouver comment le reproduire, mais il n'y a vraiment pas d'arrêt cette).

0

Une autre idée pourrait être d'exiger le contrôleur 8 bits pour envoyer un CRC de la date, l'heure et le numéro de série au serveur. Le serveur peut vérifier qu'il s'agit d'une série unique et envoyer un CRC avec la date, l'heure et le code d'autorisation.

Vous pourriez aussi chercher les algorythmes de code de roulement utilisés pour ouvre-portes de garage pour voir si elles pourraient être appliquées à votre application.