Cours:ClefUSB : Différence entre versions
m (→Travail à réaliser) |
m (→Cahier des charges) |
||
| Ligne 20 : | Ligne 20 : | ||
=Cahier des charges= | =Cahier des charges= | ||
| + | ==Première version du cahier des charges== | ||
| + | Ce que nous cherchons à faire peut être appelé "USB keylogger" en anglais (ou à peu près car le mot keylogger est associé souvent à l'enregistrement pirate de frappes au clavier). Aussi le mot anglais '''USB EasyLogger''' semble plus approprié. Nous le traduisons par '''clé de connexion USB'''. | ||
| + | |||
| + | Nous allons donc développer la partie logicielle sur une platine Leonardo. La partie matérielle finale devra être compatible Leonardo. Elle est décrite plus loin. Nous voulons être capable de : | ||
| + | * stoker plusieurs identifiants et mots de passes en EEPROM par la liaison série/USB | ||
| + | * effacer certains couples identifiants/mots de passes plus utilisés | ||
| + | * choisir lequel est actif par défaut | ||
| + | * choisir la séquence par défaut | ||
| + | Le dernier point mérite quelques explications. Les comptes éloignés nécessitent en général un identifiant et un mot de passe. Les deux sont séparés par une tabulation et après le mot de passe on valide par un '''ENTER'''. Mais sur votre ordinateur local, le bon utilisateur est parfois choisi par défaut et donc seul le mot de passe est demandé. C'est cela que nous appelons '''séquence''' et qui pourra être choisi. | ||
| + | |||
| + | Notre description de cette '''clé de connexion USB''' nécessitera une utilisation fréquente des expressions : | ||
| + | * Mot de Passe que nous résumerons le plus possible par MdP | ||
| + | * Utilisateur (ou mieux identifiant) que nous appellerons aussi par l'anglicisme login | ||
| + | * couple "Identifiant/Mot de passe" sera souvent appelé login/MdP | ||
| + | |||
| + | Pour respecter ce cahier des charges, nous envisageons d'utiliser quatre boutons : | ||
| + | * un bouton appelé '''ENTER''' pour envoyer le couple login/MdP, | ||
| + | * un bouton appelé '''MODIF''' qui devra permettre d'entrer dans un mode modification à l'aide d'un hyperterminal, | ||
| + | * un bouton appelé '''CHOIX''' qui devra aussi permettre des modifications en utilisant uniquement les trois LEDs présentes. | ||
| + | * un reset comme il y a sur le Leonardo | ||
| + | |||
| + | ==Modifications du cahier des charges== | ||
| + | Les jeunes étudiants étant plus à même d'utiliser ce genre de produit, nous avons l'intention d'animer une discussion pour éventuellement améliorer ce cahier des charges. Cette section sera donc le fruit de cette discussion. | ||
=Travail à réaliser= | =Travail à réaliser= | ||
Version du 2 janvier 2015 à 14:04
Le but de ce projet est de réaliser ce que les anglo-saxons nomment USB EasyLoggeret que nous traduisons par clé de connexion USB. L'idée est de pouvoir stocker un certain nombre d'identifiants et de mots de passe et de pouvoir les utiliser. En soi le problème est relativement simple, sauf si l'on désire gérer correctement le changement des mots de passe dans la clé.
Présentation du matériel utilisé
Le matériel utilisé sera une platine Leonardo. Ce projet ne peut pas être réalisé avec une UNO.
Nous disposons d'une clé compatible Leonardo qui pourra être utilisée pour les tests finaux.
Platine Leonardo
La platine Leonardo est architecturée autour d'un processeur ATMega32U4, le U signifiant USB. Cette version de processeur permet de gérer deux protocoles USB clients en même temps, nous voulons dire par la même prise USB. Nous verrons dans le projet de cette section (et dans l'exemple keyboardSerial de la rubrique USB) qu'il est possible d'utiliser ensemble la liaison série et un clavier USB par le même fil USB.
Nous allons examiner les performances de la Leonardo par rapport à cette liaison USB. Pour ce faire, nous allons simuler une clé USB destinée à entrer un identifiant et un mot de passe automatiquement.
Clé USB finale
Voici le schéma de principe retenu :
Ce schéma réalisé avec Eagle est de qualité suffisante pour pouvoir être téléchargé et consulté à l'aide de zooms importants.
Les trois boutons (nommés plus loin) sont clairement visibles en haut du schéma où l'on découvre clairement qu'ils sont montés à l'aide d'une pull-up externe (pas forcément utile avec la famille AVR).
Trois LEDs sont aussi visibles en bas à droite du schéma.
Cahier des charges
Première version du cahier des charges
Ce que nous cherchons à faire peut être appelé "USB keylogger" en anglais (ou à peu près car le mot keylogger est associé souvent à l'enregistrement pirate de frappes au clavier). Aussi le mot anglais USB EasyLogger semble plus approprié. Nous le traduisons par clé de connexion USB.
Nous allons donc développer la partie logicielle sur une platine Leonardo. La partie matérielle finale devra être compatible Leonardo. Elle est décrite plus loin. Nous voulons être capable de :
- stoker plusieurs identifiants et mots de passes en EEPROM par la liaison série/USB
- effacer certains couples identifiants/mots de passes plus utilisés
- choisir lequel est actif par défaut
- choisir la séquence par défaut
Le dernier point mérite quelques explications. Les comptes éloignés nécessitent en général un identifiant et un mot de passe. Les deux sont séparés par une tabulation et après le mot de passe on valide par un ENTER. Mais sur votre ordinateur local, le bon utilisateur est parfois choisi par défaut et donc seul le mot de passe est demandé. C'est cela que nous appelons séquence et qui pourra être choisi.
Notre description de cette clé de connexion USB nécessitera une utilisation fréquente des expressions :
- Mot de Passe que nous résumerons le plus possible par MdP
- Utilisateur (ou mieux identifiant) que nous appellerons aussi par l'anglicisme login
- couple "Identifiant/Mot de passe" sera souvent appelé login/MdP
Pour respecter ce cahier des charges, nous envisageons d'utiliser quatre boutons :
- un bouton appelé ENTER pour envoyer le couple login/MdP,
- un bouton appelé MODIF qui devra permettre d'entrer dans un mode modification à l'aide d'un hyperterminal,
- un bouton appelé CHOIX qui devra aussi permettre des modifications en utilisant uniquement les trois LEDs présentes.
- un reset comme il y a sur le Leonardo
Modifications du cahier des charges
Les jeunes étudiants étant plus à même d'utiliser ce genre de produit, nous avons l'intention d'animer une discussion pour éventuellement améliorer ce cahier des charges. Cette section sera donc le fruit de cette discussion.
Travail à réaliser
Le travail à réaliser va se diviser en deux parties :
- utilisation d'une liaison série pour gérer une communication avec un PC tournant sous n'importe quel OS pour la saisie et le stockage des logins et mots de passes
- utilisation de la liaison clavier USB pour les tests finaux.
Travail sur la liaison série
Nous avons décidé d'utiliser la liaison série pour gérer le stockage des "identifiants/mots de passe". Ces valeurs seront destinées à finir en EEPROM pour ne pas les perdre à chaque fois que l'on débranche l'USB. L'EEPROM est cependant une ressource qui a un nombre d'écriture limité. Pour ne pas gaspiller, nous avons décidé de faire la mise au point de cette partie en RAM. Une fois au point, nous passerons en EEPROM.
Mémoriser en mémoire RAM
Faites constater avant de passer à l'écriture en EEPROM.
Mémoriser en mémoire EEPROM
Travail sur le clavier
Mon premier programme
Pour tester le bon fonctionnement du clavier, on vous propose le programme suivant.
void setup() {
pinMode(2,INPUT);
}
void loop() {
static char new_button,old_button;
new_button=digitalRead(2);
if ((old_button==0)&&(new_button==1)) { //detection front montant
Keyboard.begin(); Keyboard.println("DEBUT AUTORISE");
Keyboard.println("abcdefghijklmnopqrstuvwxyz");
Keyboard.println("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
Keyboard.println("0123456789");
Keyboard.println(" !\"$%&'()");
Keyboard.println("%,;:!?./+=");
Keyboard.println("FIN AUTORISE");
Keyboard.println("DEBUT NON AUTORISE");
Keyboard.println("<>*#{[|`\^@]}");
Keyboard.println("FIN NON AUTORISE");
Keyboard.end();
}
old_button = new_button;
delay(100);
}