La célèbre agence d'espionnage MI7 a vécu des heures sombres ces dernières semaines. A plusieurs reprises, le matériel mis à disposition sur le terrain pour leurs agents a été détourné. Malgré les codes secrets et autres stratagèmes, les cachettes ne sont plus assez sûres et il faut envisager une autre solution ! L'agent R, responsable des innovations technologiques, a proposé de travailler sur un prototype de coffre-fort nouvelle génération avec des mécanismes d'authentification plus efficaces. La première réflexion a mis en avant les points clés suivants : Chaque agent sera doté d'une carte électronique avec un numéro (CARD_ID) unique que lui seul connaîtra. Cette carte électronique devra être insérée dans le coffre pour activer le système d'authentification. Une série d'interrupteurs (au nombre de 4) devra être positionnée avant l'insertion de la carte pour une première vérification. Le mécanisme d'activation de la carte reste encore à déterminer même s'il semble s'orienter vers une solution électrique, par exemple une combinaison de résistances permettant de déterminer une tension spécifique pour chaque modèle de carte (à priori, 8 modèles différents). Une fois la carte insérée et validée, un pavé numérique devient disponible. Ce pavé numérique permettra plusieurs types de contrôles. Des mécanismes complémentaires comme de la reconnaissance digitale, rétinienne ou vocale peuvent être envisagés. Le niveau de sécurité n'étant pas le même pour tous les agents, tout ou une partie des mécanismes d'authentification sera utilisé selon l'habilitation de l'agent. Ces informations seront contenues dans le système informatique du coffre. Une fois l'ensemble des mécanismes validés, le coffre pourra être ouvert.
String toString(double value);
int toInt(String text);
double toDouble(String text);
int chiffrer(int mDP, int e);
void choisir();
int cleAgent(String x);
void mA1();
void mA2();
void mA3();
void mA4();
void mA5();
int modexp(int a, int e, int n);
void niveausecurite1();
void niveausecurite2();
void niveausecurite3();
void niveausecurite4();
void niveausecurite5();
void setup() {
Serial.begin(9600);
}
void loop() {
int modele;
int w;
int niveau;
Serial.println("veuillez entrer numéro carte");
while (!Serial.available()) {}
w = Serial.parseInt();
int o[16] = {8, 7, 7, 6, 6, 6, 5, 4, 4, 4, 3, 3, 3, 2, 2, 1};
modele = o[w - 1];
int nivsecu[8] = {3, 1, 4, 2, 5, 3, 5, 2};
niveau = nivsecu[modele - 1];
if (niveau == 1) {
niveausecurite1();
}
if (niveau == 2) {
niveausecurite2();
}
if (niveau == 3) {
niveausecurite3();
}
if (niveau == 4) {
niveausecurite4();
}
if (niveau == 5) {
niveausecurite5();
}
}
int chiffrer(int mDP, int e) {
int n, c;
n = 43 * 67;
c = modexp(mDP, e, n);
return c;
}
void choisir() {
int nombre;
nombre = random(2881);
Serial.println(nombre);
}
int cleAgent(String x) {
int a, e;
a = 0;
e = 0;
String agent[16] = {"A", "B", "C", "D", "E", "F", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q"};
int s[16] = {601, 619, 631, 641, 647, 653, 661, 673, 691, 701, 733, 739, 751, 797, 809, 811};
while (a != 16) {
if (agent[a] == x) {
e = s[a];
a = a + 1;
} else {
a = a + 1;
}
}
return e;
}
void mA1() {
int r;
Serial.println("Quelle Président de la république française est née en 1955 ?");
Serial.println("1-Jacques Chirac");
Serial.println("2-Nicolas Sarkozy");
Serial.println("3-Emmanuel Macron");
while (!Serial.available()) {}
r = Serial.parseInt();
if (r == 2) {
Serial.println("Étape d'autentification réussie");
} else {
Serial.println("Faux");
}
Serial.println("Qui est le créateur de Microsoft ?");
Serial.println("1-Mark Zuckerberg");
Serial.println("2-Steve Jobs");
Serial.println("3-Bill Gates");
while (!Serial.available()) {}
r = Serial.parseInt();
if (r == 3) {
Serial.println("Étape d'autentification réussie");
} else {
Serial.println("Faux");
}
Serial.println("Qui raconte les aventures de Sherlock Holmes ?");
Serial.println("1-Docteur Watson");
Serial.println("2-Professeur Moriarty");
Serial.println("3-L'inspecteur Lestrade");
while (!Serial.available()) {}
r = Serial.parseInt();
if (r == 1) {
Serial.println("Étape d'autentification réussie");
} else {
Serial.println("Faux");
}
}
void mA2() {
int e, mDP, mp, c;
String x;
Serial.println("identifiez-vous:");
while (!Serial.available()) {}
x = Serial.readString();
mDP = random(2881);
e = cleAgent(x);
c = chiffrer(mDP, e);
Serial.println("Message à déchiffrer:" + String(c));
while (!Serial.available()) {}
mp = Serial.parseInt();
if (mDP == mp) {
Serial.println("Vous êtes authentifié! Bienvenue agent " + x);
} else {
Serial.println("Erreur d'authentification, le système de sécurité se déclenchera dans 5 secondes");
}
}
void mA3() {
int s3;
bool sR;
Serial.println("Veuillez présenter votre oeil (TRUE or FALSE)");
while (!Serial.available()) {}
sR = Serial.read() == 'T';
if (sR) {
Serial.println("Authentification réussies");
} else {
Serial.println("Erreur, l'accès au coffre se bloque 5 secondes");
}
}
void mA4() {
int s4;
bool sC;
Serial.println("Veuillez présenter votre oeil (TRUE or FALSE)");
while (!Serial.available()) {}
sC = Serial.read() == 'F';
if (!sC) {
Serial.println("Authentification réussies");
} else {
Serial.println("Erreur, l'accès au coffre se bloque 5 secondes");
}
}
void mA5() {
String x;
int ncard;
int i;
i = 0;
String agent[16] = {"A", "B", "C", "D", "E", "F", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q"};
int cardid[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
Serial.println("Veuillez entrer votre nom d'agent");
while (!Serial.available()) {}
x = Serial.readString();
while (i != 16) {
if (x == agent[i]) {
Serial.println("Veuillez entrer votre CARD_ID");
while (!Serial.available()) {}
ncard = Serial.parseInt();
if (ncard == cardid[i]) {
Serial.println("Bienvenue agent " + x);
i = i + 1;
} else {
}
} else {
i = i + 1;
}
}
}
int modexp(int a, int e, int n) {
int r;
if (e < 0) {
Serial.println("unhandled case");
exit(-1);
}
if (a == 0 || n == 1) {
r = 0;
} else {
r = 1;
while (e > 0) {
r = r * (a % n) % n;
e = e - 1;
}
}
return r;
}
void niveausecurite1() {
int r;
Serial.println("Quelle Président de la république française est née en 1955 ?");
Serial.println("1-Jacques Chirac");
Serial.println("2-Nicolas Sarkozy");
Serial.println("3-Emmanuel Macron");
while (!Serial.available()) {}
r = Serial.parseInt();
if (r == 2) {
Serial.println("Étape d'autentification réussie");
} else {
Serial.println("Faux");
}
Serial.println("Qui est le créateur de Microsoft ?");
Serial.println("1-Mark Zuckerberg");
Serial.println("2-Steve Jobs");
Serial.println("3-Bill Gates");
while (!Serial.available()) {}
r = Serial.parseInt();
if (r == 3) {
Serial.println("Étape d'autentification réussie");
} else {
Serial.println("Faux");
}
Serial.println("Qui raconte les aventures de Sherlock Holmes ?");
Serial.println("1-Docteur Watson");
Serial.println("2-Professeur Moriarty");
Serial.println("3-L'inspecteur Lestrade");
while (!Serial.available()) {}
r = Serial.parseInt();
if (r == 1) {
Serial.println("Étape d'autentification réussie");
int s3;
bool sR;
Serial.println("Veuillez présenter votre oeil (TRUE or FALSE)");
while (!Serial.available()) {}
sR = Serial.read() == 'T';
if (sR) {
Serial.println("Authentification réussies");
} else {
Serial.println("Erreur, l'accès au coffre se bloque 5 secondes");
}
} else {
Serial.println("Faux");
}
}
void niveausecurite2() {
int r;
Serial.println("Quel président de la République française est né en 1955 ?");
Serial.println("1-Jacques Chirac");
Serial.println("2-Nicolas Sarkozy");
Serial.println("3-Emmanuel Macron");
while (!Serial.available()) {}
r = Serial.parseInt();
if (r == 2) {
Serial.println("Étape d'authentification réussie");
} else {
Serial.println("Faux");
}
Serial.println("Qui est le créateur de Microsoft ?");
Serial.println("1-Mark Zuckerberg");
Serial.println("2-Steve Jobs");
Serial.println("3-Bill Gates");
while (!Serial.available()) {}
r = Serial.parseInt();
if (r == 3) {
Serial.println("Étape d'authentification réussie");
} else {
Serial.println("Faux");
}
Serial.println("Qui raconte les aventures de Sherlock Holmes ?");
Serial.println("1-Docteur Watson");
Serial.println("2-Professeur Moriarty");
Serial.println("3-L'inspecteur Lestrade");
while (!Serial.available()) {}
r = Serial.parseInt();
if (r == 1) {
Serial.println("Étape d'authentification réussie");
bool sC;
Serial.println("Veuillez présenter votre doigt (TRUE or FALSE)");
while (!Serial.available()) {}
sC = Serial.readStringUntil('\n') == "TRUE";
if (sC == true) {
Serial.println("Authentification réussie");
} else {
Serial.println("Erreur, l'accès au coffre se bloque 5 secondes");
}
} else {
Serial.println("Faux");
}
}
void niveausecurite3() {
int e, mDP, mp, c;
String x;
Serial.println("Identifiez-vous:");
while (!Serial.available()) {}
x = Serial.readString();
mDP = random(2881);
e = cleAgent(x);
c = chiffrer(mDP, e);
Serial.println("Message à déchiffrer:" + String(c));
while (!Serial.available()) {}
mp = Serial.parseInt();
if (mDP == mp) {
Serial.println("Vous êtes authentifié! Bienvenue agent " + x);
String z;
int ncard;
int i;
i = 0;
String agent[16];
agent[0] = "A";
agent[1] = "B";
agent[2] = "C";
agent[3] = "D";
agent[4] = "E";
agent[5] = "F";
agent[6] = "H";
agent[7] = "I";
agent[8] = "J";
agent[9] = "K";
agent[10] = "L";
agent[11] = "M";
agent[12] = "N";
agent[13] = "O";
agent[14] = "P";
agent[15] = "Q";
int cardid[16];
cardid[0] = 1;
cardid[1] = 2;
cardid[2] = 3;
cardid[3] = 4;
cardid[4] = 5;
cardid[5] = 6;
cardid[6] = 7;
cardid[7] = 8;
cardid[8] = 9;
cardid[9] = 10;
cardid[10] = 11;
cardid[11] = 12;
cardid[12] = 13;
cardid[13] = 14;
cardid[14] = 15;
cardid[15] = 16;
Serial.println("Veuillez entrer votre nom d'agent");
while (!Serial.available()) {}
z = Serial.readString();
while (i != 16) {
if (z == agent[i]) {
Serial.println("Veuillez entrer votre CARD_ID");
while (!Serial.available()) {}
ncard = Serial.parseInt();
if (ncard == cardid[i]) {
Serial.println("Bienvenue agent " + z);
i = i + 1;
} else {
// Gérer le CARD_ID incorrect
}
} else {
i = i + 1;
}
}
} else {
Serial.println("Erreur d'authentification, le système de sécurité se déclenchera dans 5 secondes");
}
}
void niveausecurite4() {
int e, mDP, mp, c;
String x;
Serial.println("Identifiez-vous:");
while (!Serial.available()) {}
x = Serial.readString();
mDP = random(2881);
e = cleAgent(x);
c = chiffrer(mDP, e);
Serial.println("Message à déchiffrer:" + String(c));
while (!Serial.available()) {}
mp = Serial.parseInt();
if (mDP == mp) {
Serial.println("Vous êtes authentifié! Bienvenue agent " + x);
int s3;
bool sR;
Serial.println("Veuillez présenter votre oeil (TRUE or FALSE)");
while (!Serial.available()) {}
sR = Serial.readStringUntil('\n') == "TRUE";
if (sR == true) {
Serial.println("Authentification réussie");
int s4;
bool sC;
Serial.println("Veuillez présenter votre oeil (TRUE or FALSE)");
while (!Serial.available()) {}
sC = Serial.readStringUntil('\n') == "TRUE";
if (sC == false) {
Serial.println("Authentification réussie");
} else {
Serial.println("Erreur, l'accès au coffre se bloque 5 secondes");
}
} else {
Serial.println("Erreur, l'accès au coffre se bloque 5 secondes");
}
} else {
Serial.println("Erreur d'authentification, le système de sécurité se déclenchera dans 5 secondes");
}
}
void niveausecurite5() {
int r;
Serial.println("Quel président de la République française est né en 1955 ?");
Serial.println("1-Jacques Chirac");
Serial.println("2-Nicolas Sarkozy");
Serial.println("3-Emmanuel Macron");
while (!Serial.available()) {}
r = Serial.parseInt();
if (r == 2) {
Serial.println("Étape d'authentification réussie");
} else {
Serial.println("Faux");
}
Serial.println("Qui est le créateur de Microsoft ?");
Serial.println("1-Mark Zuckerberg");
Serial.println("2-Steve Jobs");
Serial.println("3-Bill Gates");
while (!Serial.available()) {}
r = Serial.parseInt();
if (r == 3) {
Serial.println("Étape d'authentification réussie");
} else {
Serial.println("Faux");
}
Serial.println("Qui raconte les aventures de Sherlock Holmes ?");
Serial.println("1-Docteur Watson");
Serial.println("2-Professeur Moriarty");
Serial.println("3-L'inspecteur Lestrade");
while (!Serial.available()) {}
r = Serial.parseInt();
if (r == 1) {
Serial.println("Étape d'authentification réussie");
int e, mDP, mp, c;
String x;
Serial.println("Identifiez-vous:");
while (!Serial.available()) {}
x = Serial.readString();
mDP = random(2881);
e = cleAgent(x);
c = chiffrer(mDP, e);
Serial.println("Message à déchiffrer:" + String(c));
while (!Serial.available()) {}
mp = Serial.parseInt();
if (mDP == mp) {
Serial.println("Vous êtes authentifié! Bienvenue agent " + x);
int s3;
bool sR;
Serial.println("Veuillez présenter votre oeil (TRUE or FALSE)");
while (!Serial.available()) {}
sR = Serial.readStringUntil('\n') == "TRUE";
if (sR == true) {
Serial.println("Authentification réussie");
String z;
int ncard;
int verif;
int i;
i = 0;
String agent[16];
agent[0] = "A";
agent[1] = "B";
agent[2] = "C";
agent[3] = "D";
agent[4] = "E";
agent[5] = "F";
agent[6] = "H";
agent[7] = "I";
agent[8] = "J";
agent[9] = "K";
agent[10] = "L";
agent[11] = "M";
agent[12] = "N";
agent[13] = "O";
agent[14] = "P";
agent[15] = "Q";
int cardid[16];
cardid[0] = 1;
cardid[1] = 2;
cardid[2] = 3;
cardid[3] = 4;
cardid[4] = 5;
cardid[5] = 6;
cardid[6] = 7;
cardid[7] = 8;
cardid[8] = 9;
cardid[9] = 10;
cardid[10] = 11;
cardid[11] = 12;
cardid[12] = 13;
cardid[13] = 14;
cardid[14] = 15;
cardid[15] = 16;
Serial.println("Veuillez entrer votre nom d'agent");
while (!Serial.available()) {}
z = Serial.readString();
while (i != 16) {
if (z == agent[i]) {
Serial.println("Veuillez entrer votre CARD_ID");
while (!Serial.available()) {}
ncard = Serial.parseInt();
if (ncard == cardid[i]) {
Serial.println("Bienvenue agent " + z);
i = i + 1;
} else {
// Gérer le CARD_ID incorrect
}
} else {
i = i + 1;
}
}
} else {
Serial.println("Erreur, l'accès au coffre se bloque 5 secondes");
}
} else {
Serial.println("Erreur d'authentification, le système de sécurité se déclenchera dans 5 secondes");
}
} else {
Serial.println("Faux");
}
}
String toString(double value) {
return String(value);
}
int toInt(String text) {
return text.toInt();
}
double toDouble(String text) {
return text.toDouble();
}
Retour au portfolio