Sécuriser le code sur un AVR / Arduino et fournir des mises à jour

9
  1. Quelle est la meilleure façon de protéger le code flashé sur n'importe quel appareil AVR contre la rétro-ingénierie?
  2. Quelle est la manière la plus simple de fournir des mises à jour aux utilisateurs finaux pour qu'ils clignotent d'eux-mêmes sans divulguer le code? (Est-ce avec un chargeur de démarrage qui déchiffre une image cryptée?)

Ne me flashez pas pour la promotion de DRM, je suis en faveur de plates-formes ouvertes - je suis simplement curieux de savoir comment cela fonctionnerait.

stbtra
la source
Non. Il n'y a AUCUNE FAÇON d' empêcher entièrement la possibilité qu'une personne malveillante procède à une ingénierie inverse de votre matériel / logiciel. Tout ce que font les mesures anti-RE, c'est qu'il faut plus de temps pour revenir en arrière.
Connor Wolf

Réponses:

9

Première:

Il y a des fusibles sur la puce qui peuvent être réglés pour empêcher les outils externes de lire le code sur la puce. Recherchez les fusibles de protection dans votre fiche technique et / ou la documentation du programmeur.

Ce n'est pas parfait, mais il vous protège des attaques simples.

Seconde:

Vous ne pouvez pas télécharger le firmware en toute sécurité. L'AVR ne peut pas auto-programmer les zones protégées:

http://www.atmel.com/dyn/resources/prod_documents/doc1644.pdf

Le mieux que vous puissiez faire est d'utiliser un langage de jeton chiffré (comme basique ou autre) et de faire protéger l'interpréteur sur la puce avec un chargeur de démarrage qui peut programmer les jetons chiffrés dans une zone ouverte. Lors de l'exécution, la puce décrypterait et exécuterait les instructions à la volée.

Adam Davis
la source
3
Si les fusibles ne sont pas parfaits, quel type d'attaque peut le contourner?
1
@Anonymous - Gravure chimique du couvercle de la puce et utilisation de microscopes électroniques, de lasers et de microsondes pour visualiser, interfacer et éditer le silicium. Coûte au moins 500 $, mais peut être moins cher que le travail que stbra met dans l'appareil.
Kevin Vermeer
@KevinVermeer Voulez-vous dire 500 $? Il me semble que ce serait beaucoup plus cher que cela.
NickHalden
Adam, il y avait une erreur, j'ai donc supprimé mon commentaire
hulkingtickets
3

Si c'est si important et que vous vous inquiétez particulièrement des concurrents qui volent votre code, souscrivez une protection IP sur vos segments de code. Vous devriez examiner cela si vous voulez quand même essayer de faire de l'argent avec un projet.

Certains éléments de code peuvent être soit brevetés (pour des méthodes de traitement spécifiques et de nouveaux algorithmes), soit enregistrés en tant que dessins industriels (aspect, mise en page et application de votre code à un appareil). Vous voudrez peut-être consulter un avocat spécialisé en propriété intellectuelle à ce sujet.

Sketchy Fletchy
la source
1

Si vous avez écrit votre propre chargeur de démarrage qui a accepté les données chiffrées sur le port série, les a déchiffrées et les a stockées dans la zone de stockage de code, vous pouvez avoir une mise à jour sécurisée du firmware du code. Chaque appareil peut même avoir sa propre clé de déchiffrement unique dans votre chargeur de démarrage personnalisé.


la source
1
Je pense que ce que dit @Adam Davis, cependant, c'est que si vous utilisez un chargeur de démarrage (même celui que vous avez écrit), vous ne pouvez pas programmer de zones protégées par des bits de verrouillage. Donc, si vous avez écrit votre propre chargeur de démarrage crypté, vous ne pouvez pas empêcher la lecture de la puce (problème 1). Cela semble être ce que je reçois du lien et de la fiche technique, de toute façon.
Lou
si le chargeur de démarrage et le code sont cryptés, cela résoudrait le deuxième problème, le premier problème est presque résolu s'il utilise un cryptage suffisamment sécurisé. (la vitesse de uC peut être un goulot d'étranglement).
Rick_2047
Vrai. @Adam Davis a suggéré un langage de jeton crypté ci-dessus.
Lou