EVALUATION SOMMATIVE DUREE 6 HEURES TP de mise en œuvre d une solution Consignes : 1. Aucune communication n est autorisée pendant l évaluation sommative. 2. Tout Document peut être consulté. 3. La configuration de l Interface Homme Machine (IHM ) est à réaliser selon votre convenance. I/ Expression du besoin Pérenniser le maintien à domicile des personnes vulnérables Pérenniser le maintien à domicile des personnes vulnérables Capteurs de présence Lien Wifi ou Zigbee Serveur des alarmes Capteur 1 Capteur 2 Capteur n Réseau Internet Réseau domestique Maisons/Appartements Poste de supervision L objectif du projet est de contribuer à pérenniser le maintien à domicile des personnes vulnérables en leur offrant un environnement sûr. Dans le cadre d un service type téléalarme pour personne âgée seule à domicile, l objectif principal est de déterminer si elle est en état de détresse. Des capteurs de présence en wifi seront installés au salon, chambres, couloir, salle de bain, et cuisine. En fonctionnement nominal, une personne qui se trouve dans une des pièces "surveillées", est considérée par défaut en état "normal". Si aucun des capteurs ne détecte la personne, après un certain temps, on envoie une alarme au poste de supervision. Ce dernier appelle la personne au téléphone pour vérifier si elle est dans un état "normal" ou dans un état de détresse (une chute dans un couloir par exemple). Le logiciel devra utiliser les informations de détection ou non détection des capteurs, associées à une gestion du temps pour affiner son analyse avant d envoyer une alarme. 1
I/ PREMIERE PARTIE: Sécuriser l'accès à l'application (6points) Dans cette partie, nous nous intéresserons à la programmation d une partie de l application du poste de supervision. Le poste de supervision, reçoit les alarmes par le réseau Internet, ces dernières sont envoyées à partir du système de surveillance situé dans l appartement de la personne vulnérable. Un surveillant appelle immédiatement la personne par téléphone, si elle ne répond pas, il contacte les services de secours. Travail demandé : Dès le début de leur service, les surveillants doivent s authentifier avant d accéder aux différentes options de l application. On se propose de réaliser cette partie. L interface Homme Machine (IHM ) proposée à chaque question, est donnée à titre indicatif. Q1) Programmation HTML : Réaliser la page d accueil suivante: Q2) Programmation en PHP Pour sécuriser une application informatique, on procède comme suit : L administrateur génère des mots de passe 1) L administrateur crypte les mots de passe en utilisant un algorithme de cyptage. 2) Il envoie à utilisateur son identifiant et le mot de passe (non crypté) 3) Authentification: Le principe de l'authentification est le suivant: L utilisateur saisit son identifiant et son mot de passe (non crypté), l application crypte le mot de passe et le compare à celui mémorisé dans le programme pour savoir s'il est autorisé à accéder à cette dernière. 2
Algorithme de cryptage : Pour crypter les mots de passe des surveillants je vous propose de traduire l algorithme suivant en langage PHP : Algorithme de cryptage : remplacer chaque chiffre du code à crypter par (la somme de ce chiffre et de 7) modulo 10; ensuite il faut permuter le premier chiffre et le troisième ainsi que le deuxième et le quatrième. Données de départ : code : entier de 4 chiffres Sorties : code crypté : entier de 4 chiffres Début // Les données de départ Lire (code) // Les traitements m code / 1000 // Division entière en PHP: m=(int)(code/1000); c (code/100) modulo 10 // Le modulo = le reste de la division entière // utiliser la caractère % d (code/10) modulo 10 u code modulo 10 m (m+7) modulo 10 c (c+7) modulo 10 d (d+7) modulo 10 u (u+7) modulo 10 codecrypte d*1000+u*100+m*10+c; // Les sorties fin Afficher (codecrypte) ; Q2.1 ) Traduire cet algorithme en PHP et générer deux mots de passe. 3
Il faut ensuite communiquer aux surveillants les codes et les identifiants suivants : Surveillant 1 : Identifiant = DENIS, mot de passe = 4571 Surveillant 2 : Identifiant = WALLET, mot de passe = 1304 Q2.2) Retour au poste de supervision: Pour accéder à l application de supervision, le surveillant doit s authentifier. Votre code PHP ne doit pas contenir le mot de passe non crypté. En effet, en cas de piratage de votre serveur, on peut voir le ditmot de passe. Voici la procédure à suive : On saisit l identifiant et le mot de passe non crypté On crypte le mot de passe en appliquant l algorithme de la question 2.1 On compare le résultat obtenu au mot de passe crypté enregistré dans le code Ecrire un progarmme PHP pour pouvoir tester l identifiant et le mot de passe des deux surveillants. En cas d'erreur de mot de passe et/ou de l'identifiant afficher "Vérifier votre mot de passe ou votre identifiant", sinon afficher "Bienvenue M. DENIS". 2.3 ) Le langage PHP propose une fonction (MD5) pour réaliser le cryptage des mots de passe. Utiliser cette fonction pour crypter les mots de passe des 2 surveillants. Description string md5 ( string str) : md5 calcule le MD5 de la chaîne de caractères str en utilisant l'algorithme RSA Data Security, Inc. MD5 Message-Digest Algorithm, et retourne le résultat. Le résultat est un nombre de 32 caractères hexadécimaux. En utilisant la fonction md5, crypter les mots de passe suivants. Login Mot de passe Mot de passe Crypté DENIS 4571 WALLET 1304 Reprendre votre programme et remplacer l algorithme de la question 2.2, par la fonction md5(). 4
I/ DEUXIEME PARTIE: SUIVI DES ALARMES (12 points) Les capteurs de présence répartis au domicile (salon, chambre, salle de bain, cuisine), ont pour tâche de détecter la présence d une personne. Si aucun des capteurs ne détecte la personne, après un certain temps, le système doit envoyer une alarme au poste de superviseur. Pour lever le doute, l opérateur fait sonner le téléphone du domicile de la personne, pour vérifier si elle est toujours dans un état "normal" ou dans un état de détresse (une chute dans un couloir par exemple). Lorsque le superviseur se connecte au système d'acquisition des capteurs, ce dernier lui permet de visualiser la pièce ou se trouve la personne. On se propose dans cette partie d intégrer des images sur une IHM afin de visualiser les informations des capteurs de présence. Description de l'information délivrée par un capteur de présence Cas 1 : pas de présence ( valeur du capteur 0 ) $ ISNP01,0,U*00<CR> <LF> Valeur du checksum Valeur mesuré par le capteur, suivi de l unité(u) Entête caractérisant la nature du capteur : ISN = Initiales du capteur --- : Trois caractères pour désigner le capteur : P01 = Capteur de présence pièce 1 Début de trame $ Cas 2 : présence dans une pièce ( valeur du capteur 1 ) $ ISNP01, 1, U *00<CR> <LF> Valeur du checksum Valeur mesuré par le capteur, suivi de l unité(u) Entête caractérisant la nature du capteur : ISN = Initiales du capteur --- : Trois caractères pour désigner le capteur : P01 = Capteur de présence pièce 1 Début de trame $ 5
Pour cette deuxième partie nous allons simuler les capteurs par un saisie au clavier. Exemple de trames $trame = "\$ISNP01,0,*35\r\n"; $trame = "\$ISNP01,1,*34\r\n"; $trame = "\$ISNP02,0,*36\r\n"; $trame = "\$ISNP02,1,*37\r\n"; $trame = "\$ISNP03,0,*37\r\n"; $trame = "\$ISNP03,1,*36\r\n"; $trame = "\$ISNP04,0,*30\r\n"; $trame = "\$ISNP04,1,*31\r\n"; $trame = "\$ISNP05,1,*31\r\n"; $trame = "\$ISNP05,0,*31\r\n"; $trame = "\$ISNP06,1,*33\r\n"; $trame = "\$ISNP06,0,*32\r\n"; $trame = "\$ISNP07,0,*33\r\n"; $trame = "\$ISNP07,1,*32\r\n"; $trame = "\$ISNP08,0,*3C\r\n"; $trame = "\$ISNP08,0,*3D\r\n"; A votre disposition un dossier images comportant 9 images : maison0.gif à maison8.gif... maison0.gif maison1.gif... maison8.gif 1.1) Construire l IHM ci-dessous, pour saisir la trame d un capteur. On peut faire une saisie statique : <input type="text" name="typecapt" value ="$ISNP01,0,*35\r\n" size="20">. 1.2) Ecrire un script en PHP permettant d'afficher la trame du capteur Afficher l image et un message correspondants 6
1.3) Compléter votre script en analysant le capteur suivant <input type="text" name="typecapt" value ="$ISNP07,1,*32\r\n" size="20"> 7
Le checksum permet de vérifier l'intégrité de la trame. Description of approved Sentences $ HEX24 start of sentence <Adresse field> TALKER identifier and sentence formatter [, <data field>] Zero or more data fields [, <data field>] * <checksum field> <CR><LF> Checksum field HEX 0D 0A- End of sentence Checksum field: The absolute value calculates by exclusive-or ing the 8 data bits of each character in the sentence, between, but excluding $ and *. The hexadecimal value of the most significant and least significant 4 bits of the result are converted to two ASCII characters ( 0-9,A-F (upper case)) for transmission. The most significant character is transmitted first. The checksum field is required in all tranmitted sentences. Algorithme : Calcul d un checksum Données de départ : trame : Sorties : Début fin tableau de chaine de caractères checksumlu : un entier en base 16 ( hexadécimal) sumhex : un entier en base 16 ( hexadécimal) message : chaine de caractères // Les Entrées Lire (trame) // Traitement pos strpos(trame, * ) // recherche du caractère * checksumlu substr(trame,pos+1, 2) // Extraire deux caractères à partir de * // Calcul du checksum Sum 0; Pour i=1 à (pos-1) faire sum sum ^ ord(trame[i]) // OU EXCLUSIF finpour sumhex dechex(sum); SI (sumhex= checksumlu) alors message "trame reçu est valide Sinon message "trame Invalide finsi // Les sorties (résultats) afficher (checksumlu) afficher(sumhex) afficher (message) Rappel de quelques fonctions dont vous pourriez avoir besoin en php Description int strpos ( string $haystack, mixed $needle) Cherche la position numérique de la première occurrence de needle dans la chaîne de caractères haystack. 8
Description string substr ( string $string, int $start, int $length ) Retourne le segment de string défini par start et length. Description string dechex ( int $number ) Retourne une chaîne contenant la représentation hexadécimale de l'argument number Description int ord ( string $string ) Retourne le code ASCII du premier caractère de string. int strtoupper( string $string ) Retourne la chaîne string en majuscule. 1.4 ) Ecrire un programme qui compare le checksum calculé avec celui de la trame lue. Conclure (Voir ci-dessus l'algorithme du calcul du cheksum) <input type="text" name="typecapt" value ="$ISNP07,1,*32\r\n" size="20"> CAS d'une trame invalide 9
Evaluation Atteintes des objectifs du point de vue client Que devra-t-on observer à la fin qui témoignera de l'atteinte des objectifs fixés, du point de vue du client : 1) Accès sécurisé à l'application: Le technicien doit donner le bon mot de passe pour accéder à la page de supervision ( 6 points ) 2) A partir des informations contenues dans la trame d'un capteur (ex:"$isnp01,0,*35\r\n") on affiche l'image correspondante ( 6 points ) 3) A partir des informations contenues dans la trame d'un capteur (ex:"$isnp01,0,*35\r\n") on vérifie la validité de trame avant d'afficher l'image correspondante ( 6 points ) 4) La qualité de l'ihm (2points) Transfert de votre programme sur le serveur : A l aide d un logiciel de transfert de fichier (FTP), télécharger votre code source sur le serveur. Connectez-vous au serveur et tester le bon fonctionnement de votre programme. Information pour se connecter au serveur FTP : Hôte = 172.16.1.238 Utilisateur = 1SNIR Mot de passe = USER Port = 4451 Créer ensuite dans votre répertoire un répertoire EVAL1, et transférer vos codes. 1SNIR votre_nom EVAL1 script.htm script.php et images.gif Pour tester votre programme (depuis le Lycée) : http://172.16.1.238:4450/ Pour tester votre programme (depuis l'extérieur) : http:// 195.221.154.52 :4450/ 10