IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Le code est-il protégé ?


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut Le code est-il protégé ?
    Bonjour,

    Je développe un projet (quasiment terminé) pour une société, et celle-ci me demande s'il serait possible pour quelqu'un de "pas tout à fait transparent" d'extraire le code (programme) qui a été injecté dans une Arduino Mega Pro Mini ?

    J'avoue que je ne sais pas quoi répondre: le programme d'une Arduino Mega Pro mini peut-il être "récupéré" par quelqu'un ?

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Le code embarqué dans l'ATMEGA2560 est la version compilée du code que vous avez écris dans l'IDE Arduino. Il est impossible de réécrire à l'identique le code tel que vous l'avez écris à partir du code compilé (les commentaires ont disparu, le nom des variables n'existe plus…). Par contre, il est possible d'extraire et d'étudier le code compilé stocké dans la flash du microcontrôleur. Et même sans extraire le code, il existe plusieurs techniques (invasives ou non) qui permettent de déduire ce que fait un microcontrôleur ou ce qu'il est en train de communiquer. Il existe donc dans l'autre sens des techniques qui permettent de ralentir ou de gêner l'étude de votre code mais pas de le sécuriser à 100%.

    L'idée générale est d'évaluer les moyens que vous pouvez mettre en œuvre pour protéger votre travail par rapport aux moyens qu'un tiers (particulier, société ou état) est prêt à mettre en œuvre pour "étudier" votre travail. Dans un projet libre (open source), vous n'avez pas à en protéger la lecture puisque vous le publier dans son intégralité. Au contraire, dans un projet fermé, vous devez dissuader un concurrent d'accéder au contenu du projet. Dans les deux cas, les moyens disponibles et utilisés des deux cotés ne sont pas les mêmes.

    Pour revenir à votre question, il faut étudier avec votre client qui voudrait pirater son produit (logiciel et matériel), pour quoi faire (copie, évolution, piratage…) et quelles sont les ressources (temps, argent, compétence…) dont vous disposez pour gérer tout ça. Idéalement (normalement?), ces questions se posent au début du projet, pas à la fin.

  3. #3
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 908
    Par défaut
    +1 avec la réponse précédente

    Il faut voir ce que représente la valeur d'un piratage éventuel pour décider quelles contre-mesures prendre. vous n'allez pas dépenser 1 million d'euros pour protéger quelque chose que l'on peut redévelopper pour 5000 euros.

    D'un point de vue pratique, si les fusibles ne sont pas activés et quelques précautions techniques éventuellement supplémentaires pas implémentées (composant avec N° de série, clé d'activation, ...), il est assez simple d'extraire le binaire présent dans la mémoire de l'Arduino et de l'injecter dans un autre Arduino (faire un clone de votre système).


    Notez aussi que selon le licenses des bibliothèques que vous avez utilisées dans le projet (eg LGLP V3 qui est "contaminante"), vous pouvez avoir besoin de fournir le code source complet qui permettrait à quelqu'un de rebâtir le code à tout client qui en ferait la demande. cf https://www.jurisexpert.net/leffet-c...s-open-source/

  4. #4
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut
    Intéressante discussion finalement !

    C'est sûr que l'on ne dépensera pas 1M€ pour protéger ça, mais quand tu dis:

    D'un point de vue pratique, si les fusibles ne sont pas activés
    ça me rappelle la protection des EPROM dans ma jeunesse...
    Est-il possible de faire ça sur une Arduino Mega Pro Mini ? (et si oui comment...)

    composant avec N° de série, clé d'activation, ...
    vous pensez plus précisément à quoi ? Admettons que l'on donne un N° de série (ça c'est facile), vous imaginez quoi comme méthode d'activation ?

    Notez aussi que selon le licenses des bibliothèques que vous avez utilisées dans le projet (eg LGLP V3 qui est "contaminante"), vous pouvez avoir besoin de fournir le code source complet qui permettrait à quelqu'un de rebâtir le code à tout client qui en ferait la demande.
    Tiens je n'avais jamais pensé à ça, mais si je comprends bien, n'importe qui peut demander le source de n'importe quel projet Arduino alors ? (puisque GPL est largement majoritaire si je ne m'abuse).
    Si j'extrapole (mais peut-être que je me trompe) Arduino n'est pas adapté aux projets "commerciaux" puisque ceux-ci ne peuvent pas être "protégés", au sens où tout le monde peut demander le code source ?

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par grizzli06 Voir le message
    Tiens je n'avais jamais pensé à ça, mais si je comprends bien, n'importe qui peut demander le source de n'importe quel projet Arduino alors ? (puisque GPL est largement majoritaire si je ne m'abuse).
    Si j'extrapole (mais peut-être que je me trompe) Arduino n'est pas adapté aux projets "commerciaux" puisque ceux-ci ne peuvent pas être "protégés", au sens où tout le monde peut demander le code source ?
    Les bibliothèques Arduino sont plutôt sous LGPL (plus permissive). Par exemple : https://github.com/arduino/ArduinoCo...pins_arduino.h

    Tout est expliqué dans la FAQ : https://support.arduino.cc/hc/en-us/...tible-Products

    La où cela devient parfois plus problématique, c'est avec l'utilisation de bibliothèques tierces. Il faut vérifier la licence au cas par cas.

  6. #6
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 252
    Par défaut
    Bonjour,
    Quasiment tous les microcontrôleurs sont munis d'une protection contre les lectures/debug via une sonde.

    Il est quasiment certain que les microcontrôleurs Microchip l'ont aussi.

    Ça ne peut pas suffir ?

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bonjour

    L'ATMega2560 a ce qu'il faut en terme de fusible pour protéger contre une lecture du code embarqué. Voir sa datasheet à ce sujet.

    A noter:
    - Le Bootloader Arduino ne peut pas écrire les fusibles, il faut un vrai programmateur pour cela (ISP, JTAG, Parallèle).
    - Cela n'empêche pas la lecture par le Bootloader Arduino. Il faut virer le Bootloader et ne programmer que le programme par ISP. Je ne connais pas assez Arduino pour savoir si cela est faisable et sous quelles conditions.

    Bonne suite

    Delias

  8. #8
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 908
    Par défaut
    Il faut virer le Bootloader et ne programmer que le programme par ISP. Je ne connais pas assez Arduino pour savoir si cela est faisable et sous quelles conditions.
    cf "In-System-Programmer" (aka ISP) pour se passer du boot loader (et récupérer ainsi un peu d'espace mémoire au passage) ==>https://docs.arduino.cc/retired/gett...des/ArduinoISP

    Si j'extrapole (mais peut-être que je me trompe) Arduino n'est pas adapté aux projets "commerciaux" puisque ceux-ci ne peuvent pas être "protégés", au sens où tout le monde peut demander le code source ?
    Non pas tout à fait. Il y a une différence en la V3 de LGPL et les autres.
    cf cette discussion: https://forum.arduino.cc/t/lgpl-and-...roducts/233946

    Il existe au moins une liste de bibliothèques contaminantes, je ne sais pas si elle est maintenue à jour donc important de vérifier la licence de chacune des bibliothèques utilisées.

    https://www.arduinolibraries.info/licenses/lgpl-3-0


    vous pensez plus précisément à quoi ? Admettons que l'on donne un N° de série (ça c'est facile), vous imaginez quoi comme méthode d'activation ?
    Si vous avez protégé un minimum contre l'extraction/injection de code et que vous avez un moyen d'entrée d'une clé d'activation (ça peut être un petit fichier à mettre sur SD si votre projet en est équipé par exemple), alors votre code peut vérifier que la clé d'activation est conforme par un algo classique de crypto. (Pour éviter de coder en dur une clé qui serait attaquable, on peut aussi faire un CRC d'une partie du code pour générer la clé ce qui fait que si le code change alors la clé change.)

    Si vous livrez très peu d'unités et que le coût le permet, vous ajoutez un composant qui a un numéro de série unique (il y en a peut être un déjà dans votre montage) et chaque produit peut être flashé pour que le test du N° de série soit "en dur".

  9. #9
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 908
    Par défaut
    Si l'Arduino ne sait pas le faire, me voici revenu au point de départ !
    L'IDE ne le fait pas. L'arduino (le micro-contrôleur) le supporte, il faut juste passer en ISP par exemple. cf les liens

  10. #10
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut
    Oh désolé JayM, je n'avais réalisé que tu m'avais donné des liens , sorry !

    Je sais ce que je vais lire ce soir après diner !! et pourquoi je vais probablement devoir souder les 6 pins ISP que je ne soudais jamais jusqu'à présent

    Je reviens vers vous après avoir lu l'article...

    Mille mercis

Discussions similaires

  1. [AC-2010] Export objet depuis une base dont le code est protégé
    Par guen dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/06/2014, 08h14
  2. Ce code est-il compatible ?
    Par pablo8 dans le forum Mon site
    Réponses: 18
    Dernier message: 23/06/2006, 16h39
  3. [Dates] calcul de date est ce que mon code est bon?
    Par carmen256 dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2006, 11h30
  4. [MVC] Ce code est-il conforme?
    Par vallica dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/04/2006, 06h40
  5. new Option : ne marche pas quand le code est en alpha ???
    Par Leoxp dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/12/2005, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo