Cacher le contenu d'une variable

Bonjour à vous tous,

Je suis actuellement en train de créer un coffre-fort avec un arduino. Il me reste un dernier problème à régler : comment cacher une variable dans mon programme.

Le code secret est actuellement codé de la manière suivante :

int rightnumber[combinationlenght] = {50, 50, 50, 50};   // combinationlenght = 4, 50 = 2 en ASCII

Il est donc accessible à tout le monde.

Si quelqu'un possède une réponse, j'en suis preneur.

Remerciements.

Pour le voir il faut avoir accès au code... donc ne donnez pas accès au code, juste à l'Arduino...

A moins d'avoir à rentrer une sorte de mot de passe pour décoder, votre programme contiendra soit le code en clair, soit l'algorithme qui permet de valider le code... donc si quelqu'un a accès au programme, il peut avoir accès à un moyen de trouver le code. (il existe des techniques mathématiques qui permettent de stocker une représentation dérivée du mot de passe qui ne permet pas de retrouver le mot de passe d'origine mais ça me semble hors du cadre de votre question)

Si votre Arduino a accès à internet vous pourriez déporter la vérification du code sur un serveur distant

Une technique consiste à calculer, sur votre code, une fonction dite "trappe à sens unique", par exemple un condensé MD5, et vérifier le résultat. Quelqu'un qui hacke l'arduino va voir le condensé attendu et ne pourra pas en déduire le code qui a produit ce condensé.

oui c'est ce que je voulais dire par

techniques mathématiques qui permettent de stocker une représentation dérivée du mot de passe

SHA-256 sera plus robuste qu'un digest MD5. j'ai posté dans un autre fil de discussion un bout de code qui fait un hash (SHA-256 ou SHA256 HMAC) et compare avec une valeur attendue (et un lien vers un site web pour obtenir le code correspondant à votre mot de passe)

il ne faut pas s'arrêter là cependant si l'arduino est physiquement accessible, il faut activer les fusibles du processeur qui empêchent de télécharger un nouveau code


à noter que vous pourriez écrire cela plutôt sous la forme

const char rightnumber[] = {'2', '2', '2', '2'};
const byte combinationlenght = sizeof rightnumber / sizeof rightnumber[0];

ça rend le code plus lisible sans se taper la table ASCII et la longueur est maintenant déterminée par le tableau de code plutôt que le contraire --> plus simple à modifier

hello
si tu as un code secret à taper, tu as un clavier.
dans ton code,pourquoi ne pas avoir la possibilité de changer le code secret et qu'il soit sauvegardé en eprom.
personne ne le verra, tu seras le seul à le connaitre.

il te faut 2 codes
un pour toi , le patron: il te donne accès aux changements de codes secrets "patron" et "client"
un pour toi , le patron, commun avec le client. il ne donne accès qu'à l'ouverture du coffre

une fois les premiers changements faits, et sauvegardés en eprom. toi tu connais les deux codes secrets et tu donnes le code "client" au client.

si tu oublies le code patron, plus de changements possibles, à moins de recharger le programme et de recommencer par un changement de codes pour qu'ils soient à nouveau sauvegardés et secrets

Avec avrdude on peut faire un dump de l'EEPROM (si la carte n'est pas protégée).
Donc appliquer aussi la technique du hash pour le "mot de passe du boss" peut être intéressant

hello jml, ok :+1:

mais bonne idée d'utiliser l'EEPROM pour un mot de passe super utilisateur

Merci pour vos retour, je suis en train de tester la technique des deux mots de passe dont 1 sauvgarder dans l'EEPROM, je vous tiens au jus