[[{"text":"","title":"Sécurisation des communications","tagtitle":"h1"},{"edit":"
Mettre le résultat ici (code et figure).
"}],[{"text":"
****** fig routeur
Avec les acquis du programme de première [NSI 1'°, chap. 26, 28 et 29], nous pouvons comprendre exactement ce qu'il se passe lorsque l'on navigue
vers un site web, par exemple « https://www.sciencesappliquees.com/ ».
L'URL du site est décodée par le navigateur.
Ce dernier isole le protocole (HTTP), le nom de domaine (www.sciencesappliquees.com) et le chemin vers la ressource (ici /, la « racine » du site).
Le navigateur effectue une résolution de nom pour déterminer l'adresse IP correspondant au nom de domaine (209.245.128.109).
Le navigateur peut alors établir une connexion TCP vers l'adresse IP du serveur web, sur le port 80.
Une fois la connexion établie, client et serveur échangent des données en utilisant le protocole HTTP.
On se souvient aussi que les communications sur Internet utilisent un ensemble de protocoles, organisés en couches:
Couche matérielle avec des protocoles tels que Ethernet ou 802.11 n.
Couche Internet, avec le protocole IP permettant de définir des routes, c'est-à-dire l'ensemble des machines du réseau traversées pour atteindre la machine de destination.
Couche de transport avec les protocoles UDP ou TCP, qui s'occupent en particulier de garantir l'intégrité des données transmises (garanties minimales pour UDP ou très fortes pour TCP).
Couche d'application dans laquelle se trouvent les protocoles de haut niveau : HTTP, IMAP, etc.
Ce processus à été très peu modifié depuis la conception de TCP/IP à la fin des années 1970.
Chaque protocole (SMTP, FTP, puis HTTP au
milieu des années 1990), s'est inséré dans ce cadre au niveau de la couche
d'application.
Cependant, avec la démocratisation d'Internet, du Web et la diversification des usages, des problèmes sont apparus.
En effet, comme on le sait, les données transmises par le protocole de la couche d'application sont découpés en paquets TCP, eux-mêmes encapsulés dans des paquets IP.
****** photo routeur
Ces paquets IP sont envoyés par la source au prochain routeur de son sous-réseau.
Ce routeur retransmet ensuite le paquet au routeur suivant et ainsi de suite jusqu'à l'arrivée à destination.
Chaque routeur peut donc inspecter les paquets pour en connaître le contenu.
Cette situation n'est clairement pas idéale.
En effet, si l'on utilise un site web pour effectuer des transactions bancaires, renseigner des informations personnelles (impôts, arrêt maladie, etc.), ou simplement exprimer son opinion, on souhaite que le contenu des messages envoyés ne soit connu que de deux entités:
la source et la destination.
Ce simple constat nous permet de mettre en avant trois aspects liés à la sécurisation des communications:
Comment chiffrer le contenu des communications, afin qu'elles ne soient lisible que par la source et la destination?
Comment garantir que le serveur auquel on se connecte est bien celui de la personne et ou de l'entité auquel on pense se connecter?
Comment garantir les deux propriétés ci-dessus en réutilisant l'infrastructure d'Internet, à savoir les communications TCP/IP?
","title":""},{"edit":"
Mettre le résultat ici (code et figure).
"}],[{"text":"⊕
********* mettre des apps et table xor
Une première technique lorsque l'on souhaite chiffrer un message est d'utiliser une méthode de chiffrement symétrique.
Formellement, une telle méthode est donnée par deux fonctions :
c(m,k) est la fonction de chiffrement. Elle prend en arguments un message en clair m (une chaîne de caractères par exemple) et une clé de chiffrement k (qui peut être une chaîne de caractères, un nombre, etc.).
Elle produit en sortie une chaîne de caractères chiffrée s.
d(s,k) est la fonction de déchiffrement. Elle prend en arguments un message chiffré s et une clé de déchiffrement k et renvoie le message en clair m.
Le terme symétrique vient du fait que la même clé est utilisée pour chiffrer et déchiffrer le message.
Un exemple simple de méthode de chiffrement symétrique est le chiffrement par décalage, encore appelé codage de César (de l'empereur romain Jules César qui utilisait cette technique pour ses correspondances militaires).
La méthode consiste à choisir un entier n et à décaler chaque lettre du message initial de n lettres dans l'alphabet (en recommençant à « A » si le décalage fait dépasser « Z »).
Ici, l'entier n constitue la clé de chiffrement.
Par exemple, en utilisant un décalage de 5 lettres, le message
L INFORMATIQUE C EST SUPER
devient
Q NSKTWRFYNVZJ H JXY XZUJW
La fonction de déchiffrement consiste à prendre un message chiffré et à décaler chaque lettre de n positions vers l'arrière.
Une méthode de chiffrement un peu moins naïve est le chiffrement par XOR (ou ou exclusif).
******* table de vérité
Celle-ci repose sur l'utilisation de l'opérateur binaire ou exclusif noté ⊕.
Étant donné un message m (par exemple
« L'INFORMATIQUE C'EST SUPER ») et une clé de chiffrement k (par exemple
« NSI »), on recopie plusieurs fois la clé de façon à obtenir une chaîne de la
même longueur que le message:
L'INFORMATIQUE C'EST SUPER
NSINSINSINSINSINSINSINSINS
Chaque caractère du message et de la clé augmentée est ensuite converti en
Une propriété intéressante de l'opérateur ⊕ est qu'il est réversible:
si A⊕B = C, alors A⊕C = B et B⊕C = A.
Ce n'est pas le cas des opérateurs logiques et (and) et ou bits à bits.
On peut facilement contrôler que 84⊕78 = 26, mais aussi que 84 @ 26 = 78 et 78 ⊕ 26 = 84.
Par conséquent, le message chiffré ci-dessus peut être déchiffré en réexécutant
l'opération ⊕ nombre à nombre avec les entiers formant la clé étendue
« NSINSINSINSINSINSINSINSINS ».
De plus, l'opérateur ⊕ est l'une des
opérations de base implémentée par le matériel dans l'unité arithmétique et
logique du microprocesseur.
Ces caractéristiques font que l'opérateur ⊕ est une brique de base couramment utilisée dans les algorithmes de chiffrement modernes (même si, utilisé naïvement comme nous l'avons fait ci-dessus, il n'apporte pas une grande sécurité).
Attention cependant:
si la méthode de chiffrement est connue, alors une clé trop courte (comme celle choisie ici) peut compromettre la sécurité de la communication.
Parmi les algorithmes de chiffrement symétriques les plus utilisés, on peut citer AES (pour l'anglais Advanced Encryption Standard, standard de
chiffrement avancé) et ChaCha20.
Bien que très complexes, ces deux algorithmes reposent sur des principes similaires au chiffrement XOR décrit plus
haut:
une clé initiale est étendue (mais pas aussi naïvement qu'en la répétant);
la clé et le message sont mélangés (en utilisant entre autres des opérations ⊕), de façon réversible.
En plus d'être sûrs (il est excessivement difficile, sans connaître la clé, de décrypter un message), ils sont très efficaces et permettent de chiffrer de longs messages en temps réel.
Par exemple, ils permettent de chiffrer les données contenues dans un fichier avant de les écrire sur un disque dur, où
de chiffrer des communications audio ou vidéo en temps réel sans impact perceptible sur les performances du système.
Coder : représenter de l'information par un ensemble de signes prédéfinis. On utilise parfois le verbe encoder.
Décoder : interpréter un ensemble de signes pour extraire l'information qu'ils représentent.
Chiffrer : rendre une suite de symboles incompréhensible au moyen d'une clé de chiffrement.
Déchiffrer/décrypter : retrouver la suite de symboles originale à partir du message chiffré.
On utilise le terme déchiffrer lorsque l'on utilise une clé de déchiffrement pour récupérer le texte initial et le
terme décrypter lorsque l'on arrive à déterminer le message original sans utiliser la clé.
Coder et décoder s'utilisent lorsqu'il n'y à pas de secret, Par exemple, on parle de « codage en complément à deux » des entiers. C'est juste une façon de représenter les entiers positifs ou négatifs par une suite de bits.
N'importe qui peut décoder la suite de bits pour déterminer l'entier.
Le terme « coder » (qui est un anglicisme, to code) est aussi utilisé de façon informelle comme synonyme de « programmer » comme dans la phrase
« j'ai codé cette application ».
L'anglicisme « crypter » est à proscrire;
on utilisera « chiffrer ».
","title":""},{"edit":"
Mettre le résultat ici (code et figure).
"}],[{"text":"
Cryptanalyse
La cryptanalyse est un ensemble de techniques utilisées pour décrypter un texte, c'est-à-dire retrouver le texte en clair à partir du texte chiffré sans posséder la clé de déchifirement.
Une telle tentative de décryptage s'appelle une attaque sur le texte chiffré.
Il existe diverses techniques, très complexes.
Par exemple, si on dispose d'un programme permettant de chiffrer un texte en utilisant une clé, on peut essayer de chiffrer plusieurs messages choisis, en faisant varier les messages et la clé pour voir comment le résultat chiffré se
comporte.
Les attaques statistiques, quant à elles, tentent de déterminer le contenu du message en collectant des statistiques (fréquences, nombre ou densité de certaines suites d'octets) dans le message chiffré.
Une autre technique, si on dispose de la fonction de déchiffrement mais pas de la
clé, consiste à exécuter une attaque par force brute, en énumérant et en essayant toutes les clés possibles.
Si la clé de chiffrement est trop courte, alors ce type d'attaque basique à de fortes chances de réussir.
Les attaques par canal auxiliaire tentent de déterminer des informations sur l'algorithme de chiffrement, la clé ou le message en mesurant des phénomènes indirectement liés au processus de chiffrement.
Par exemple, en mesurant précisément la température de certaines zones du microprocesseur pendant le chiffrement, certains attaquants réussissent à déterminer quelle partie de l'unité arithmétique et logique est utilisée et donc quelles opérations sont utilisées et avec quelle fréquence (multiplications, ou exclusif, additions, etc.).
En mesurant les temps de chiffrement pour un fichier de taille fixe, un attaquant peut parfois déterminer la taille de la clé initiale, avant qu'elle ne soit étendue.
En combinant ces techniques, d'autres informations plus importantes encore peuvent être déterminées, comme le nombre de bits à « 1 » dans la clé.
À l'inverse, le rôle des concepteurs de méthodes de chiffrement est de les rendre résistantes à de telles attaques.
","title":""},{"edit":"
Mettre le résultat ici (code et figure).
"}],[{"text":"
Malgré les nombreux avantages du chiffrement symétrique, ce dernier possède un défaut important.
En effet, si deux personnes veulent établir un canal de communication sûr en utilisant une méthode de chiffrement symétrique, les deux personnes doivent d'abord se mettre d'accord sur la clé à
utiliser (et évidemment sur l'algorithme lui-même).
Or, les deux participants sont justement dans la situation où il ne peuvent pas encore communiquer de façon sûre.
Ils vont donc avoir un problème pour se mettre d'accord sur la clé:
soit ils échangent la clé par un moyen de communication non sûr (par e-mail, par courrier, etc.) mais dans ce cas, un attaquant pourrait alors s'emparer de la clé et compromettre la sûreté des futures communications chiffrées avec cette clé;
soit ils échangent la clé par un moyen « non pratique », par exemple en stockant une clé générée sur un support de stockage et en se rencontrant physiquement pour se donner la clé de chiffrement.
Pour résoudre ce problème, diverses techniques ont été développées dès les
années 1970, d'abord de manière privée, en particulier par les services secrets
britanniques et américains, puis dans la recherche académique publique.
Ces techniques reposent sur la cryptographie asymétrique encore appelée cryptographie à clé publique.
Nous présentons ici trois méthodes de cryptographie à clé publique, par ordre chronologique de leur découverte.
Nous nous limitons à une description de haut niveau sont hors programme.
Les puzzles de Merkle sont l'un des premiers exemples de méthode cryptographique à clé publique.
Ils ont été proposés en 1974 par le cryptologue américain Ralphe C. Merkle (1952-).
Alice et Basile souhaitent se mettre d'accord sur une clé secrète, c'est-à-dire une clé de chiffrement pour un algorithme symétrique.
Ils n'ont à leur disposition qu'un canal de communication non sûr qui peut être espionné à tout moment par Ève (diminutif de l'anglais eavesdropper, l'oreille indiscrète ou l'espion).
Alice et Basile procèdent en trois étapes.
Étape 1 : Alice génère un très grand nombre N (par exemple 100 000) de
messages de la forme:
identifiant : i, clé : k
où i et k sont générés aléatoirement.
Par exemple, Alice génère un fichier de
100 000 lignes contenant:
...
identifiant : 129878, clé : abAZda9h!snasjda
identifiant : 821012, clé : sladl)i32#QSdsal
identifiant : 321091, clé : 9Sakns281a154031
...
Étape 2 : Alice va ensuite chiffrer chaque ligne avec un algorithme de chiffrement symétrique et une clé de faible longueur différente pour chaque
ligne.
Le but est que chaque ligne soit susceptible d'être décryptée avec une attaque par force brute, par exemple en 10 secondes de calcul.
Pour l'exemple, nous utilisons la méthode par ou exclusif de la section précédente
avec des clés formées de quatre lettres majuscules.
Il énumère toutes les clés possibles de petite taille pour trouver celle qui correspond.
Il arrive à déchiffrer la ligne
identifiant : 821012, clé : sladlj132#QSdsal
grâce à la clé « QDTU ».
Basile renvoie alors à Alice le message en clair « 821012 ».
Eve peut aussi intercepter ce message mais ne peut a priori rien en faire.
Étape 4 : sur réception du message de Basile, Alice regarde dans son fichier
en clair la ligne contenant « identifiant : 821012 ».
Ils peuvent tous les deux utiliser maintenant la clé « s1adl1j132#QSdsal » pour communiquer.
Le point crucial ici est qu'Eve ne peut pas deviner quelle ligne a été choisie par Basile.
Elle n'a donc pas d'autre choix que d'essayer d'attaquer en force brute les 100000 lignes du fichier, et tester chacune de ces lignes déchiffrées pour tenter de décoder la communication entre Basile et Alice.
Si forcer une ligne prend une seconde, alors Eve mettra au pire 1000 000 secondes et en moyenne 500 000 secondes pour trouver la bonne clé (soit un peu moins 6 jours).
Pendant ces six jours, Alice et Basile disposent d'un canal sûr, qu'ils peuvent utiliser pour échanger des informations.
Cette technique a été l'une des premières proposées et repose sur l'asymétrie suivante:
choisir et attaquer une ligne est une opération réaliste pour Basile, mais déchiffrer toutes les lignes est coûteux pour Eve.
Ici, si découvrir une ligne coûte M secondes et qu'il y a N lignes, le coût moyen pour Eve est de (MxN)/2 secondes.
Bien que novatrice pour l'époque, cette technique n'apporte pas de nos jours des garanties suffisantes.
Mais elle a été une source d'inspiration directe pour la seconde méthode que nous présentons, le protocole d'échange de clés Diffie-Hellman.
","title":""},{"edit":"
Mettre le résultat ici (code et figure).
"}],[{"text":"
*******
Méthode de Diffie-Hellman
Le protocole d'échange de clés de Diffie-Hellman est une autre méthode permettant à deux participants de convenir d'une clé symétrique partagée en utilisant un canal de communication non sûr.
Ce protocole a été proposé en 1976 par Bailey W. Diffie (1944—) et Martin Hellman (1945-), deux eryptologues américains.
Il repose sur certaines fonctions mathématiques dont nous décrivons ici les caractéristiques sans rentrer dans les détails.
Supposons que nous possédions une fonction mathématique M (pour « mélange ») prenant en arguments deux entiers et possédant les propriétés suivantes:
La fonction M est connue (on connaît sa formule où l'algorithme qui permet de la calculer).
Si on connaît M(x,y) et x alors il est « difficile » de retrouver y. Par difficile, on souhaite que la seule façon dont on dispose pour trouver un y tel que M(x,y) ait une valeur donnée est d'essayer tous les entiers y possibles.
Pour tous entiers x, y et z, on a M(M(x,y),z) = M(M(x,z),y).
Une analogie couramment utilisée est celle des pots de peintures.
Supposons que l'on ait à notre disposition un très grand nombre de couleurs de peintures différentes.
Les entiers x, y et z correspondent à trois couleurs différentes, par exemple :
x est un certain jaune bien particulier,
y un bleu
et z un rouge.
La fonction M prend 10cl (centilitre) de deux couleurs et les mélange (pour obtenir 20cl de peinture).
Notre fonction M possède bien les trois propriétés ci-dessus.
Nous connaissons M et tout un chacun (muni d'un verre doseur) peut la reproduire (propriété 1}.
Étant données deux couleurs (par exemple
jaune et bleu), si on les mélange on obtient 20 cl d'un vert bien particulier.
Il semble a priori impossible, en ayant à notre disposition le vert et la référence
exacte du jaune, de deviner quel bleu a été utilisé, car pour de la peinture il n'existe pas d'opération de «soustraction» qui permettrait de retirer le jaune du vert (propriété 2).
Enfin, si on mélange d'abord Je jaune et le bleu, puis le rouge on obtient au final 30 cl d'un certain marron.
On obtient 30 el du même marron si on mélange d'abord le jaune et le rouge, puis qu'on ajoute le bleu (propriété 3).
Une remarque importante est que, même si on dispose d'un mélange vert (jaune et bleu) et orange (jaune et rouge), alors
si on réunit ces deux mélange on btiendra 40 cl d'un marron différent (car la proportion de jaune est plus importante).
La figure 1 décrit le protocole en utilisant l'analogie des couleurs.
*******
Alice Canal public (non sûr) Basile
Étape 1
æ — Jaune moutarde
Étape 2
z = Rouge rubis
M{x,z) = Orange
y = Bleu cobalt
M{zx,y) = Vert
Étape 3
M(x,y) = Veat : Mx,z) = Orange
Étape à
Mélange de Orange
et Bleu cobalt
M(M(x, 2),y)
Mélange de Vert
let Rouge rubis
| M(M(x,y),2)
Marron Marron
À partir de ce point, Alice et Basile peuvent communiquer de façon sûre
en utilisant le « Marron » comme clé de chiffrement
pour un algorithme symétrique
Figure 1 — Le protocole d'échange de clés de Diffie-Hellman.
*******
Les étapes permettant le partage de clés sont les suivantes:
Étape 1: Alice et Basile se mettent avant tout d'accord sur une couleur de base commune. Cette couleur est considérée comme « publique ». En cffet, Alice et Basile doivent pour l'instant communiquer via un canal non sécurisé.
On doit donc faire l'hypothèse qu'un attaquant peut avoir connaissance du contenu des communications.
Étape 2: Alice et Basile choisissent ensuite chacun une couleur qu'ils gardent secrète. Une fois cette couleur choisie, ils la mélangent à la couleur publique pour obtenir chacun un mélange dont il est impossible d'extraire la couleur secrète.
Étape 3: Ils peuvent ensuite chacun s'envoyer leur mélange respectif. Ici, un attaquant pourrait connaître les mélanges, mais grâce aux propriétés de la fonction de mélange M, il ne peut pas découvrir la couleur secrète.
Étape 4: Alice et Basile ajoutent au mélange reçu leur couleur secrète, Ils disposent donc tous les deux d'un mélange des trois couleurs dans les bonnes proportions.
Ils peuvent utiliser ce mélange comme clé.
Le protocole d'échange de clés de Diffie-Hellman résout de façon élégante le problème d'échange de clé posé par l'utilisation d'un algorithme de chiffrement symétrique.
L'utilisation de ce protocole laisse toutefois une dernière faiblesse:
il ne permet pas l'authentification des participants,
i.e., Alice n'a pas la garantie que la personne avec qui elle communique de façon sûre est bien Basile.
La troisième méthode de crypographie asymétrique que nous présentons, RSA, permet de résoudre ce problème.
","title":""},{"edit":"
Mettre le résultat ici (code et figure).
"}],[{"text":"
Le système RSA
Le système RSA est un système de chiffrement asymétrique basé sur des paires de clés publiques et privées.
Son nom est formé des initiales de ces trois inventeurs : Ron Rivest (1947), cryptologue américain, Adi Shamir (1952-), cryptologue israélien, et Len Adleman (1945--), cryptologue américain.
Tout comme le protocole de Difie-Hellman, ce système repose sur des théorèmes mathématiques complexes, dont le détail va au-delà du programme de terminale.
Ce système se prête également moins bien à des analogies simples, telle que celle des couleurs.
Nous n'en détaillons donc que les grands principes et nous nous concentrons sur son utilisation pour l'authentification des participants à une communication en réseau.
Nous abordons dans un premier temps la partie chiffrement.
Le système RSA consiste en la mise en place d'une paire de clé publique et privée pour chaque participant.
Nous notons KpubAlice, la clé publique d'Alice et KprivAlice sa clé privée.
La notation K__Alice(m) signifie, «chiffrer m avec la clé K (publique ou privée) d'Alice ».
La manière exacte de créer ces clés est complexe.
La seule chose à retenir est que les deux clés sont liées.
Étant donné un message m, on à:
Kpub_Alice ( Kpriv_Alice(m)) = Kpriv_Alice ( Kpub_Alice(m)) = m
ce qui signifie que si on chiffre le message m d'abord avec la clé privée puis
qu'on chiffre le résultat avec la clé publique, ou dans l'autre ordre, on obtient le message initial.
En d'autres termes, l'une des deux clés permet de défaire le chiffrement effectué par l'autre clé.
Les propriétés mathématiques mises en jeux font aussi qu'il est
impossible, en connaissant Kpub_Alice, de deviner Kpriv_Alice;
impossible, en connaissant uniquement Kpub_Alice(m) ou Kpriv_Alice(m), de deviner m.
Une fois ces propriétés établies, si Basile souhaite envoyer un message secret
à Alice, les deux procèdent comme suit:
Alice diffuse sa clé publique Kpub_Alice. Par exemple, elle la met sur sa page web, elle l'envoie par e-mail, etc. Cette clé peut être connue de tous. La clé privée est gardée secrète par Alice.
Basile chiffre son message m en effectuant Kpub_Alice(m) et l'envoie à Alice.
Alice applique sa clé privée au message chiffré KprivAlice(KpubAlice(m)) et obtient ainsi le message en clair.
Comme on le voit, le système RSA permet de chiffrer des messages sans s'être mis d'accord sur une clé de chiffrement symétrique commune.
Ce système possède cependant un inconvénient de taille:
le chiffrement et le déchiffrement nécessitent des calculs très coûteux.
Cette complexité fait qu'il n'est pas possible d'utiliser RSA pour chiffrer directement des gros volumes de données ou des flux de communication (par exemple une visioconférence avec envoi de vidéo et de son).
Ce problème peut être réglé en remarquant qu'on peut utiliser RSA dans le même but que le protocole d'échange de clé de Difñc-Hellman.
Si Basile veut échanger des gros volumes de données de façon sûre avec Alice, il peut d'abord choisir une clé pour un algorithme de chiffrement symétrique.
Une telle clé est un fichier de quelques milliers d'octets. Il peut ensuite envoyer cette clé à Alice, de manière sûre, en utilisant RSA.
Une fois la clé symétrique reçue, un algorithme de chiffrement symétrique efficace (tel que ChaCha20 ou AES) peut être utilisé.
Un autre avantage de RSA, qui a fait sa popularité, est la possibilité de l'utiliser comme système d'authentification.
","title":""},{"edit":"
Mettre le résultat ici (code et figure).
"}],[{"text":"
***** schema site interner serveur
Attaque de l'homme du milieu
Comme nous l'avons vu, le chiffrement des communications permet de se protéger contre l'espionnage des communications, c'est-à-dire l'observation passive par un tiers des messages envoyés entre deux participants.
Considérons maintenant le scénario suivant.
Supposons qu'Alice soit cliente de l'établissement bancaire BasileBanque.
Les communications entre Alice et BasileBanque étant confidentielles, elles doivent évidemment être chiffrécs, mais cela n'est pas suffisant.
Marion (la malveillante) peut procéder à l'attaque suivante.
Elle envoie un e-mail au format HTML à Alice, lui demandant de se connecter d'urgence sur le site de sa banque.
Veuillez vous connecter d'urgence au site BasileBanque.com
Si Alice n'est pas méfiante, et que Marion utilise en plus d'autres techniques (comme de reproduire exactement la page d'accueil dn site BasileBanque. com), alors elle ne se rendra pas compte qu'elle est connectée au mauvais site.
Marion pourra donc recevoir tous les messages envoyés par Âlice.
Elle pourra aussi les retransmettre au véritable site BasileBanque.com, en se faisant passer pour Alice.
Marion sera donc dans une position d'intermédiaire entre Alice et Basile.
Elle pourra retransmettre passivement les requêtes d'Alice à BasileBanque, ou les modifier avant de les retransmettre (par exemple changer le montant ct le destinataire d'un virement bancaire), ce que l'on peut illustrer par le schéma suivant:
********
[Alice ]&—— +————— | BasileBanque.com
Ici, le chiffrement n'est d'aucune aide.
En effet, même si Alice établit un canal sûr entre elle et Marion, et que Marion en établit un entre elle-même et BasileBanque, l'attaque peut quand même avoir lieu.
On appelle cela une attaque de l'homme du milieu (ou man in the midle attack en anglais, souvent abrégé en MITM).
La faille fondamentale permettant cette attaque est l'absence d'authentification.
Ici, le serveur de Marion, qui imite le comportement du serveur de BasileBanque, n'a pas eu à prouver qu'il était bien une machine appartement à BasileBanque.
Nous allons maintenant voir comment le système RSA peut être utilisé pour authentifier les communications.
","title":"Authentification des participants","tagtitle":"h1"},{"edit":"
Mettre le résultat ici (code et figure).
"}],[{"text":"
Certificats et tiers de confiance
Comme on l'a vu, afin de sécuriser entièrement les communications entre deux participants, il faut non seulement les chiffrer, mais aussi que chaque participant puisse s'assurer de l'identité de son correspondant.
Avant de rentrer dans les détails de l'authentification des communications en réseau, nous allons faire une analogie avec l'authentification des personnes en France.
L'État délivre aux citoyens français (qui font les démarches) une carte nationale d'identité.
Si un bureau de poste souhaite authentifier une personne pour lui permettre de retirer un colis, elle peut vérifier la carte d'identité de la personne.
La carte d'identité n'est qu'un bout de carton plastifié et ne permet donc pas à elle seule de prouver l'identité d'une personne.
Le système fonctionne parce que le bureau de poste fait confiance à l'État qui a fait les vérifications nécessaires pour s'assurer de l'identité de la personne avant de lui délivrer la carte.
Les communications en réseau sur Internet sont authentifiées de la même façon.
L'entité qui veut prouver son identité présente un certificat.
Ce dernier doit être délivré par une autre entité. en laauelle les deux participants ont confiance, que l'on appelle un tiers de confiance.
Si Alice, qui souhaite correspondre avec BasileBanque, veut s'assurer que c'est bien Basile qui est le propriétaire du site, elle devra lui demander un certificat.
Ce dernier sera délivré par un tiers de confiance, Théo (le tiers de confiance).
Évidemment, dans le cadre de communications en réseau, le certificat doit être lui aussi numérique.
Ces certificats numériques sont créés à partir des clés RSA publiques et privées des participants.
Étape 1 : Basic va voir Théo. Théo vérifie que Basile est bien le propriétaire du site BasileBanque.com.
Il peut par exemple constater que Basile
peut administrer le site, rajouter des pages, ou qu'il peut présenter des documents légaux (preuve d'achat du nom de domaine par exemple).
Une fois ces vérifications faites, Théo utilise sa clé privée KpubBasile pour chiffrer la clé publique de Basile:
s = KprivThéo(KpubBasile)
Un tel fichier s s'appelle un certificat.
Dans ce cas particulier, on dit que Théo signe la clé publique de KpubBasile avec sa clé privée.
Étape 2 : Alice veut se connecter à BasileBanque.com. Lors de la connexion, le site lui fournit la clé publique de Basile, KpubBasile ainsi que le certificat s.
Étape 3 : Alice récupère alors la clé publique de Théo, en qui elle a confiance.
Alice peut alors comparer la clé publique que Basile lui à fournie et celle résultant du déchiffrement de la signature.
Si les deux sont les mêmes, Alice a la garantie que Basile est bien passé voir Théo et que ce dernier a bien fait toutes les vérifications nécessaires.
Étape 4 : Alice ayant authentifié BasileBanque.com comme étant bien le site détenu par Basile, elle peut initier avec lui une communication sécurisée, par exemple en utilisant la clé publique pour chiffrer une clé symétrique ou en utilisant Diffie-Hellman pour se mettre d'accord sur une clé.
","title":""},{"edit":"
Mettre le résultat ici (code et figure).
"}],[{"text":"
Nous sommes maintenant équipés pour expliquer le fonctionnement du protocole HTTPS (Hyper Text Transfer Protocole Secure, protocole de transfert de documents hypertexte sécurisé).
Bien que ce dernier repose sur les concepts cryptographiques que nous avons présentés, d'autres considérations
ont été prises en compte lors de sa conception:
compatibilité avec HTTP: le but n'est pas de recréer un nouveau protocole, mais juste de rendre HTTP plus sûr;
modularité et compatibilité future: les systèmes cryptographiques présentés reposent sur le fait que certaines opérations demandent tellement de temps de calcul à l'attaquant qu'elles sont incassables en pratique. Cependant, les capacités de calculs des ordinateurs augmentant avec les progrès technologiques, il faut pouvoir changer la difficulté des problèmes à résoudre (par exemple augmenter la taille des clés ou changer les algorithmes de chiffrement) sans remettre en cause tout le protocole;
performances : un site web populaire devra effectuer plusieurs milliers d'opérations de chiffrement et déchiffrement par seconde. Comme on l'a vu, les méthodes symétriques sont peu coûteuses mais demandent de pouvoir échanger une clé de façon sûre. Les méthodes asymétriques sont sûres mais très coûteuses en temps de calcul, il faut donc limiter l'usage de ces dernières au strict minimum.
Une autorité de certification (ou AC) est une entité habilitée à délivrer des certificats.
Une AC est un tiers de confiance. Parmi les différentes AC on retrouve:
des entreprises spécialisées;
des associations à but non lucratif (comme l'initiative Let's Encrypt, libre et gratuite);
des états.
Comme nous l'avons vu, le rôle des tiers de confiance est d'attester, au moyen d'un certificat numérique, qu'une entité (entreprise, personne, etc.) est bien qui elle prétend être.
Les autorités de certifications forment un «club» très fermé.
En effet, les systèmes d'exploitation et les navigateurs web, en particulier, possèdent les clés publiques des AC sous forme de fichiers.
Elles sont en nombre relativement restreint.
Par exemple, au début 2020, la fondation
Mozilla, qui produit le navigateur web Firefox, reconnaît environ un peu plus d'une centaine d'autorités de certification.
Chacune d'elles répond à des critères très stricts, vérifiés par des audits réguliers dont les résultats sont publics.
Les société Microsoft, Apple et Google (qui développent des systèmes d'exploitation et des navigateurs) ont elles aussi leurs critères (qui ne sont pas forcément les mêmes que ceux de la fondation Mozilla) pour accepter les autorités de certification.
Les systèmes d'exploitation et les navigateurs web possèdent une copie de chacune de leurs clés publiques.
Les AC émettent des certificats. Ces derniers fonctionnent sur le principe expliqué précédemment, avec quelques considérations techniques supplémentaires.
Le format standard de certificat est le format X.509. Ce dernier est un format de fichier binaire, contenant entre autres:
l'identifiant de l'AC qui signe le certificat;
l'identifiant de l'entité certifiée;
la date de validité du certificat;
la clé publique de l'entité certifiée;
l'algorithme utilisé pour la signature du certificat;
la signature du certificat par l'AC.
Sous Unix, la commande openssl permet d'obtenir des informations sur un certificat.
Par exemple, le certificat du site https://nsi-terminale.fr peut être affiché comme ceci:
$ openssl x509 -in fullchain.pem -text
Ici, le paramètre x509 indique que l'on travaille avec un certificat au format X.509, le paramètre -in permet de donner le fichier de certificat, ici fullchain.pem et le paramètre -text indique que l'on souhaite afficher le contenu du certificat de façon lisible.
L'AC ayant produit ce certificat est « Let's Encrypt ». Le certificat n'est
valide que sur la période du 4 mai au 2 août 2020, et devra être renouvelé après.
Le site certifié est nsi-terminale.fr.
La clé publique du site, c'est-à-dire celle qui sera utilisée par le navigateur web pour chiffrer la communication initiale, fait 2048 bits, et est donnée par les deux champs Modulus et Exponent {raccourcis pour des raisons d'espace).
Enfin, l'algorithme de signature est sha256WithRSAEncryption.
Cet algrithme est une variation de la signature RSA que nous avons présentée dans la section précédente.
Ici, plutôt que de signer (i.e., de chiffrer) toutes la clés publiques du site, PAC a d'abord calculé une somme de contrôle avec l'algorithme de hachage SHA256.
Ce dernier produit un entier de 256 bits en « mélangeant » les différents octets du certificat (tous les champs présentés, exceptés Signature Algorithm: et la signature).
Ce « résumé » du certificat (incluant le nom de l'entité, les dates de validité et la clé publique) est ensuite signé (i.e., chiffré) avec la clé privée de l'autorité « Let's Encrypt ».
Lorsque le client, Alice, souhaite vérifier que le site
******
https://
nsi-terminale.fr
*******
est authentifié, il lui suffit de retirer les deux derniers champs du certificat, de calculer la somme de contrôle avec l'algorithme SHA256, et de la chiffrer avec la clé publique de l'autorité « Let's Encrypt ».
Cette dernière étant une autorité reconnue, les navigateurs web possèdent
une copie de sa clé publique, afin de procéder aux vérifications.
Avant d'illustrer comment les certificats sont utilisés dans le cadre du protocole HTTPS, nous terminons notre présentation des autorités de certifications en citant les niveaux de certifications. En effet, il existe trois niveaux de certification possibles:
DV (pour l'anglais domain validated, soit validation du domaine), c'est le niveau le plus basique. l'AC a juste vérifié que la personne qui a demandé le certificat est bien la personne qui contrôle le nom de domaine certifié. Ce contrôle peut être fait à distance, en demandant à l'admiuistrateur de déposer à un certaine URL un fichier généré par l'AC (par exemple
*******
http://nsi-terminale.fr/fichier).
OV (pour l'anglais organisation validated, validation de l'organisation), est le niveau intermédiaire. Des vérifications sont faites sur l'existence légale de la personne morale ou physique correspondant à l'entité certifiée.
L'AC effectue des vérifications manuelles auprès de l'entité (généralement une entreprise) qui demande la certification. Par exemple, l'AC passe un appel téléphonique au siège social de l'entreprise pour s'assurer de son existence, en plus des vérifications faites au niveau DV.
EV (pour l'anglais extended validated, soit validation étendue), est le niveau le plus haut de certification. L'AC vérifie les documents légaux fournis
par l'entreprise à certifier et recoupe ces vérifications avec les registres
publics (registres des entreprises par exemple), en plus des vérifications
faites au niveau OV.
","title":""},{"edit":"
Mettre le résultat ici (code et figure).
"}],[{"text":"
Détails du protocole HTTPS
Le protocole HTTPS qui permet d'établir des communications sécuri-
sées entre un client et un serveur web est en fait simplement le protocole
HTTP, auquel une couche de cryptographie a été ajoutée. En effet, HTTPS
est simplement la réunion de deux protocoles existants, HTTP, pour l'in-
teraction avec le serveur web et TLS (Transport Layer Security, sécurité
de la couche de transport). Rappelons-nous le fonctionnement du protocole
HTTP. Lorsqu'un client (par exemple un navigateur web) souhaite afficher la
naon httne://wrmr nei-torminala fr/indos htmi il initin uno ronnavinan
TCP vers l'adresse IP de la machine www.nsi-terminale.fr sur le port 80.
Une fois la connexion établie, le navigateur envoie une requête HTTP, c'est-
à-dire une suite d'octets de la forme
GET /index.html HTTP/1.1
Host: www.nsi-terminale.fr
Le protocole TLS ajoute simplement une phase permettant l'authentification
du serveur et la mise en place sécurisée d'une clé de chiffrement symétrique, appelée clé de session. Une fois cette clé déterminée et connue du client et du
serveur, le client et le serveur échangent des requêtes et réponses HTTP (la
requête GET précédente), mais ces dernières seront chiffrées avant l'envoi
et déchiffrées lors de la réception. L'authentification empêche l'exécution
d'attaques de l'homme du milieu, et le chiffrement empêche les routeurs et
autres machines intermédiaires de lire le contenu des messages. La figure 24.2
décrit la phase de mise en place, appelée « poignée de main TLS » (TLS
handshake en anglais). Cette phase initiale n'étant pas compatible avec le
protocole HTTP, un port différent à été choisi pour le protocole HTTPS, à
savoir je port 448.
Les étapes de cette poignée de main reprennent chacun des points déve-
loppés tout au cours du chapitre.
Étape 1 : Le client envoi un message initial (nommé « Hello ») ainsi que
des options. En particulier, le client indique les différents algorithmes cryp-
tographiques qu'il peut utiliser, ainsi que d'autres paramètres techniques.
Étape 2 : Le serveur envoie sa réponse, contenant entre autres le certificat
X.509 contenant sa clé publique, signée par une autorité de certification.
Étape 3 : Le client vérifie le certificat au moyen de la clé publique de l'AC
(qu'il doit posséder). Il procède aussi à d'autres vérifications (comme le fait
que le certificat est toujours valide).
Étape 4 : Le client et le serveur conviennent d'une clé de session pour un
algorithme symétrique. Iis peuvent soit choisir de chiffrer une clé choisie par
le client avec la clé publique du serveur, soit utiliser le protocole d'échange
de clé de Diffie-Hellman pour convenir d'une cié de session partagée.
Étape 5 : Le serveur est authentifié par le client, et les deux ont convenu
d'une clé de session. Ils peuvent donc échanger de manière sûre des messages
du protocole HTTP en les chiffrant.
Tous ces aspects sont observables en inspectant Picône de « cadenas » se
trouvant dans la barre d'adresse des navigateurs web. Par exemple, pour le
navigateur Firefox, connecté au site https://www.nsi-terminale.fr, on
peut afficher les propriétés de la connexion, comme indiqué à la figure 24.3.
Dans cette figure, on peut voir entre autres détails que la connexion utilise
les options
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
Serveur
Hello
'
i
ï
Client ' Internet
ï
ï
‘
Options
1
1
'
' X.509
ï
'
'
Lie
®\" :
1
validation, pub
KCA
4
X.509
@..
ï
'
:
1
1
1
:
1
1
1
'
He Clé de session
' =
'
'
'
'
1
'
échanges sécurisés
Figure 24,2 — Mise en place d'une connexion HTTPS.
ce qui signifie qu'elle utilise le protocole TLS (plutôt que son prédécesseur
SSL, moins sûr). Le sigle ECDHE, pour Elliptic Curve Diffie-Hellman Ephe-
meral, indique que la clé de session est échangée par le protocole de Diffie-
Hcliman dans sa variante utilisant les courbes elliptiques comme problème
mathématique sous-jacent. L'authentification est assurée par RSA. Le chif-
frement symétrique est quant à lui assuré par l'algorithme AES128.
Certains problèmes peuvent survenir lors de la poignée de main TLS.
Le plus courant est l'utilisation par le serveur d'un certificat non signé ou
signé par une entité inconnue. Un navigateur indique alors un message si-
milaire à celui de la figure 24.4. La présence de ce message indique que la
communication est chiffrée, mais pas authentifiée. Le serveur web peut alors
appartenir à un utilisateur malveillant effectuant une attaque de l'homme
du milieu. En pratique, ce phénomène sc produit aussi lorsque le certificat
west plus valide, par exemple si l'administrateur du site n'a pas renouvelé
son certificat à temps. En cas d'absence de chiffrement (utilisation du proto-
cole HTTP simple), le navigateur affiche généralement un cadenas rouge ou
harré nt dénanenilla 18 gsigie Aa mate de nager nu antre infnrmatian sancihla
&
Général
identité du site web
Stéweb: mwwnsiterminale.fr
Propriétarre : Ce site web ne fournit pas d'informations sur son prapriétaire.
Vérifie par: Let's Encrypt Afficher le certificat
Expirele: 2 août 2020
Vie privée ct historique
Aije déjà visité ce site web auparavant ? Oui, 11 fois
Ce site web conserve-t-i des informations sur mon ordinateur ? Non
Aïje un mot de passe enregistré pour ce site web 7 Non Voir les mots de passe enregistrés
La spécialité NSI est ouverte aux lycéennes et lycéens qui veulent s’approprier des concepts et des méthodes qui fondent l’informatique. Cet enseignement prolonge l’enseignement commun de 2de en sciences numériques et technologie (SNT) et s’appuie sur les cours d'algorithmique de mathématiques en 2de.
Au programme
L'horaire hebdomadaire est de 4h en 1re et 6 h en terminale.
Quatre grands domaines sont abordés : les données, les algorithmes, les langages, les machines (dont les objets connectés et les réseaux), et leurs systèmes d’exploitation.
Cet enseignement favorise les travaux pratiques et la réalisation de projets.
Des projets variés
Une partie des cours (au moins un quart de l'horaire) est consacrée aux projets des élèves.
En première comme en terminale, par petits groupes, ils doivent imaginer des solutions pour répondre à un besoin.
Les sujets sont variés. Les élèves peuvent travailler autour d’un objet connecté ou d’un robot, du traitement d’image ou de son, d’une application mobile (par exemple de réalité virtuelle ou augmentée), du développement d’un site Web associé à l’utilisation d’une base de données, de la réalisation d’un interprète d’un mini-langage ou encore d’un programme de jeu de stratégie, etc.
Plusieurs parcours d’études supérieures recrutent NSI :
Les universités en informatique ;
Les écoles d’ingénieur post-bac ;
Les classes prépa, avec une nouvelle section MPI (Maths-Physique-Informatique) ;
[[{"visi":false,"text":"EC sur le thême C.","title":""},{"edit":""}],[{"text":"Laquelle de ces listes de chaînes de caractères est triée en ordre croissant ?","theme":"C","nume":"1","sujet":3,"annee":2020},{"radio":[{"label":" [\"112\", \"19\", \"27\", \"45\", \"8\"]","sol":true},{"label":" [\"8\", \"19\", \"27\", \"45\", \"112\"]"},{"label":" [\"8\", \"112\", \"19\", \"27\", \"45\"]"},{"label":" [\"19\", \"112\", \"27\", \"45\", \"8\"]"}]}],[{"text":"On considère l’extraction suivante d'une base de données des départements français. Cette extraction a ensuite été sauvegardée dans un fichier texte. \"1\",\"01\",\"Ain\",\"AIN\",\"ain\",\"A500\" \"2\",\"02\",\"Aisne\",\"AISNE\",\"aisne\",\"A250\" \"3\",\"03\",\"Allier\",\"ALLIER\",\"allier\",\"A460\"
\"5\",\"05\",\"Hautes-Alpes\",\"HAUTES-ALPES\",\"hautes-alpes\",\"H32412\" On considère le code suivant : import csv with open('departements.csv', newline='') as monFichier: lesLignes = csv.reader(monFichier)
for uneLigne in lesLignes: print(uneLigne[3]) Que va produire l'exécution de ce code ?
","theme":"C","nume":"2","sujet":3,"annee":2020},{"radio":[{"label":" L'affichage de la troisième colonne à savoir le nom du département avec une majuscule initiale"},{"label":" L'affichage de tout le contenu du fichier"},{"label":" L'affichage du nombre total de départements figurant dans le fichier"},{"label":" L'affichage de la quatrième colonne, à savoir le nom du département tout en majuscules","sol":true}]}],[{"text":"On a défini : mendeleiev = [ ['H','.', '.','.','.','.','.','He'], ['Li','Be','B','C','N','O','Fl','Ne'], ['Na','Mg','Al','Si','P','S','Cl','Ar'], ...... ] Une erreur s'est glissée dans le tableau, car le symbole du Fluor est F et non Fl. Quelle instruction permet de rectifier ce tableau ?","theme":"C","nume":"4","sujet":3,"annee":2020},{"radio":[{"label":" mendeleiev.append('F')"},{"label":" mendeleiev[1][6] = 'F'","sol":true},{"label":" mendeleiev[6][1] = 'F'"},{"label":" mendeleiev[-1][-1] = 'F'"}]}],[{"text":"Quelle est la valeur de la variable table à la fin de l'exécution du script suivant : table = [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]] table [1][2] = 5","theme":"C","nume":"5","sujet":3,"annee":2020},{"radio":[{"label":" [[1, 5, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]"},{"label":" [[1, 2, 3], [5, 2, 3], [1, 2, 3], [1, 2, 3]]"},{"label":" [[1, 2, 3], [1, 2, 5], [1, 2, 3], [1, 2, 3]]","sol":true},{"label":" [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 5, 3]]"}]}],[{"text":"On considère la liste de p-uplets suivante : table = [ ('Grace', 'Hopper', 'F', 1906), ('Tim', 'Berners-Lee', 'H', 1955), ('Ada', 'Lovelace', 'F', 1815), ('Alan', 'Turing', 'H', 1912) ] où chaque p-uplet représente un informaticien ou une informaticienne célèbre ; le premier élément est son prénom, le deuxième élément son nom, le troisième élément son sexe (‘H’ pour un homme, ‘F’ pour une femme) et le quatrième élément son année de naissance (un nombre entier entre 1000 et 2000). On définit une fonction : def fonctionMystere(table): mystere = [] for ligne in table: if ligne[2] == 'F': mystere.append(ligne[1])
return mystere Que vaut fonctionMystere(table)?
","theme":"C","nume":"6","sujet":3,"annee":2020},{"radio":[{"label":" [‘Grace’, ‘Ada’]"},{"label":" [('Grace', 'Hopper', 'F', 1906), ('Ada', 'Lovelace', 'F', 1815)]"},{"label":" [‘Hopper’, ’Lovelace’]","sol":true},{"label":" []"}]}],[{"text":"Qu'est-ce que le format de fichier CSV ?","theme":"C","nume":"1","sujet":4,"annee":2020},{"radio":[{"label":" un format de fichier mis au point par Microsoft pour Excel"},{"label":" un format de fichier pour décrire une base de données"},{"label":" un format de fichier où les données sont séparées par un caractère tel qu'une virgule","sol":true},{"label":" un format de fichier décrivant une page Web"}]}],[{"text":"Soit le tableau défini de la manière suivante : tableau = [[1,3,4],[2,7,8],[9,10,6],[12,11,5]] On souhaite accéder à la valeur 12, on écrit pour cela :","theme":"C","nume":"2","sujet":4,"annee":2020},{"radio":[{"label":" tableau[4][1]"},{"label":" tableau[1][4]"},{"label":" tableau[3][0]","sol":true},{"label":" tableau[0][3]"}]}],[{"text":"On exécute le script suivant : asso = [] L = [ ['marc','marie'], ['marie','jean'], ['paul','marie'], ['marie','marie'], ['marc','anne'] ]
for c in L : if c[1]==’marie’:
asso.append(c[0]) Que vaut asso à la fin de l'exécution ?
lovelace, ada, 1815, 1852 von neumann, john, 1903, 1957
turing, alan, 1912, 1954
mccarthy, john, 1927, 2011
floyd, robert, 1936, 2001 Le programme ci-dessous nous permet de créer un tableau à partir de ce fichier. file = open(\"info.csv\", \"r\") firstLine = file.readline() # chargement de la ligne d’entête
tableau = [line.split(',')
for line in file] # chargement des données Les index des lignes de ce tableau vont...
","theme":"C","nume":"4","sujet":4,"annee":2020},{"radio":[{"label":" de 0 à 3"},{"label":" de 1 à 4"},{"label":" de 0 à 4","sol":true},{"label":" de 0 à 5"}]}],[{"text":"On considère l’extraction suivante d'une base de données des départements français. Cette extraction a ensuite été sauvegardée dans un fichier texte. \"1\",\"01\",\"Ain\",\"AIN\",\"ain\",\"A500\" \"2\",\"02\",\"Aisne\",\"AISNE\",\"aisne\",\"A250\" \"3\",\"03\",\"Allier\",\"ALLIER\",\"allier\",\"A460\" \"4\",\"04\",\"Alpes-de-Haute-Provence\",\"ALPES-DE-HAUTE-PROVENCE\",\"alpes-de-haute- provence\",\"A412316152\"
\"5\",\"05\",\"Hautes-Alpes\",\"HAUTES-ALPES\",\"hautes-alpes\",\"H32412\" Quel est le format de ce fichier ?
","theme":"C","nume":"5","sujet":4,"annee":2020},{"radio":[{"label":" YML"},{"label":" XML"},{"label":" CSV","sol":true},{"label":" JSON"}]}],[{"text":"On exécute le script suivant : a = [1, 2, 3]
b = [4, 5, 6]
c=a+b Que contient la variable c à la fin de cette exécution ?
","theme":"C","nume":"6","sujet":4,"annee":2020},{"radio":[{"label":" [5,7,9]"},{"label":" [1,4,2,5,3,6]"},{"label":" [1,2,3,4,5,6]","sol":true},{"label":" [1,2,3,5,7,9]"}]}],[{"text":"On a défini : mendeleiev = [ ['H','.', '.','.','.','.','.','He'], ['Li','Be','B','C','N','O','Fl','Ne'], ['Na','Mg','Al','Si','P','S','Cl','Ar'], ...... ] Comment construire la liste des gaz rares, c'est-à-dire la liste des éléments de la dernière colonne ?","theme":"C","nume":"3","sujet":5,"annee":2020},{"radio":[{"label":" gaz_rares = [ periode[7] for periode in mendeleiev]","sol":true},{"label":" gaz_rares = [ periode for periode in mendeleiev[7]]"},{"label":" gaz_rares = [ periode for periode[7] in mendeleiev]"},{"label":" gaz_rares = [ periode[8] for periode in mendeleiev]"}]}],[{"text":"On considère la table suivants : t = [ {'type': 'marteau', 'prix': 17, 'quantité': 32}, {'type': 'scie', 'prix': 24, 'quantité': 3}, {'type': 'tournevis', 'prix': 8, 'quantité': 45} ] Quelle expression permet d'obtenir la quantié de scies ?","theme":"C","nume":"4","sujet":5,"annee":2020},{"radio":[{"label":" t[2]['quantité']"},{"label":" t[1]['quantité']","sol":true},{"label":" t['quantité'][1]"},{"label":" t['scies']['quantité']"}]}],[{"text":"On souhaite construire une table de 4 lignes de 3 éléments que l’on va remplir de 0.
Quelle syntaxe Python utilisera-t-on ?
","theme":"C","nume":"5","sujet":5,"annee":2020},{"radio":[{"label":" [ [ 0 ] * 3 for i in range (4) ]","sol":true},{"label":" for i in range (4) [ 0 ] * 3"},{"label":" [ 0 ] * 3 for i in range (4)"},{"label":" [ for i in range (4) [ 0 ] * 3 ]"}]}],[{"text":"On définit ainsi une liste t : t = [ {'id':1, 'age':23, 'sejour':'PEKIN'}, {'id':2, 'age':27, 'sejour':'ISTANBUL'}, {'id':3, 'age':53, 'sejour':'LONDRES'}, {'id':4, 'age':41, 'sejour':'ISTANBUL'}, {'id':5, 'age':62, 'sejour':'RIO'}, {'id':6, 'age':28, 'sejour':'ALGER'}] Quelle affirmation est correcte ?","theme":"C","nume":"6","sujet":5,"annee":2020},{"radio":[{"label":" t est une liste de listes"},{"label":" t est une liste de dictionnaires","sol":true},{"label":" t est un dictionnaire de listes"},{"label":" t est une liste de tuples","sol":false}]}],[{"text":"On exécute le code suivant : dict = { \"alexandre\" : 17, \"mehdi\" : 18, \"jeanne\" : 16, \"charlotte\" : 19, \"celina\" : 18, \"noé\" : 19 } def f(dic): for cle, valeur in dic.items() : if valeur > 18:
return cle Que renvoie l'appel f(dict) ?
","theme":"C","nume":"1","sujet":6,"annee":2020},{"radio":[{"label":" 19"},{"label":" 19,19"},{"label":" \"charlotte\"","sol":true},{"label":" \"charlotte\",\"noé\""}]}],[{"text":"On a extrait les deux premières lignes de différents fichiers. Déterminer celui qui est un authentique fichier CSV : ","theme":"C","nume":"2","sujet":6,"annee":2020},{"radio":[{"label":" Nom,Pays,Temps
Camille Muffat,France,241.45
","sol":true},{"label":" Nom Pays Temps
Camille Muffat France 241.45
"},{"label":"[ { \"Nom\": \"Camille Muffat\", \"Pays\": \"France\", \"Temps\": 241.45}, "},{"label":"[ { Nom: \"Camille Muffat\", Pays: \"France\", Temps: 241.45},"}]}],[{"text":"On considère la table suivants : t = [ {'type': 'marteau', 'prix': 17, 'quantité': 32}, {'type': 'scie', 'prix': 24, 'quantité': 3}, {'type': 'tournevis', 'prix': 8, 'quantité': 45} ] Quelle expression permet d'obtenir la quantié de scies ?","theme":"C","nume":"3","sujet":6,"annee":2020},{"radio":[{"label":" t[2]['quantité']"},{"label":" t[1]['quantité']","sol":true},{"label":" t['quantité'][1]"},{"label":" t['scies']['quantité']"}]}],[{"text":"On a défini deux tables de données : data1 = [(‘Bruce’, ’Wayne’), (‘Chuck’, ‘Norris’), (‘Bruce’, ‘Lee’), (‘Clark’, ‘Kent’)]
data2 = [(‘Diana’, ’Prince’), (‘Chuck’, ‘Norris’), (‘Peter’, ‘Parker’)] Quelle instruction permet de construire une table data regroupant l'ensemble des informations de data1 et data2 ?
","theme":"C","nume":"5","sujet":6,"annee":2020},{"radio":[{"label":" data = data1 + data2","sol":true},{"label":" data == data1 + data2"},{"label":" data = [element for element in data1 or data2]"},{"label":" data = [data1] + [data2]"}]}],[{"text":"On exécute le script suivant : a = [1, 2, 3]
b = [4, 5, 6]
c=a+b Que contient la variable c à la fin de cette exécution ?
","theme":"C","nume":"6","sujet":6,"annee":2020},{"radio":[{"label":" [5,7,9]"},{"label":" [1,4,2,5,3,6]"},{"label":" [1,2,3,4,5,6]","sol":true},{"label":" [1,2,3,5,7,9]"}]}],[{"text":"Qu'est-ce que le CSV ?","theme":"C","nume":"1","sujet":7,"annee":2020},{"radio":[{"label":" Un langage de programmation"},{"label":" Un format de fichier permettant de stocker de l’information","sol":true},{"label":" Un algorithme permettant de rechercher une information dans un fichier"},{"label":" Un format de fichier permettant de définir le style d’une page web"}]}],[{"text":"On définit la variable suivante :
lettres = {\"a\": 1, \"b\": 2, \"c\": 3}.
Quelle est la valeur de l'expression list(lettres.keys()) ?
","theme":"C","nume":"2","sujet":7,"annee":2020},{"radio":[{"label":" [a,b,c]"},{"label":" [1,2,3]"},{"label":" [\"a\",\"b\",\"c\"]","sol":true},{"label":" {\"a\": 1, \"b\": 2, \"c\": 3}"}]}],[{"text":"On déifnit la fonction suivante qui prend en argument un tableau non vide d'entiers. def f(T):
s=0 for k in T:
if k == 8:
s = s+1 if s > 1:
return True else: return False Dans quel cas cette fonction renvoie-t-elle la valeur True ?
","theme":"C","nume":"3","sujet":7,"annee":2020},{"radio":[{"label":" dans le cas où 8 est présent au moins une fois dans le tableau T"},{"label":" dans le cas où 8 est présent au moins deux fois dans le tableau T","sol":true},{"label":" dans le cas où 8 est présent exactement une fois dans le tableau T"},{"label":" dans le cas où 8 est présent exactement deux fois dans le tableau T"}]}],[{"text":"Soit la table de données suivante :
nom
prenom
date_naissance
Dupont
Pierre
17/05/1987
Dupond
Catherine
18/07/1981
Haddock
Archibald
23/04/1998
Quels sont les descripteurs de ce tableau ?
","theme":"C","nume":"1","sujet":8,"annee":2020},{"radio":[{"label":" nom, prenom et date_naissance","sol":true},{"label":" Dupont, Pierre et 17/05/1987"},{"label":" Dupont, Dupond et Haddock"},{"label":" il n'y en a pas"}]}],[{"text":"On utilise habituellement un fichier d'extension csv pour quel type de données ?","theme":"C","nume":"3","sujet":8,"annee":2020},{"radio":[{"label":" des données structurées graphiquement"},{"label":" des données sonores"},{"label":" des données compressées"},{"label":" des données structurées en tableau","sol":true}]}],[{"text":"On exécute le code suivant : table = [ ['lovelace', 'ada', 1815, 1852], ['von neumann','john', 1903, 1957], ['turing', 'alan', 1912, 1954], ['mccarthy', 'john', 1927, 2011], ['floyd', 'robert', 1936, 2001] ] def age(personnage): return personnage[3] - personnage[2]
table.sort(key=age, reverse=True)
Quelle est la première ligne de la table table à la suite de cette exécution ?
","theme":"C","nume":"1","sujet":9,"annee":2020},{"radio":[{"label":" ['lovelace', 'ada', 1815, 1852]"},{"label":" ['mccarthy', 'john', 1927, 2011]","sol":true},{"label":" ['turing', 'alan', 1912, 1954]"},{"label":" ['mccarthy', 'floyd', 'von neumann', 'turing', 'lovelace']"}]}],[{"text":"Parmi les extensions suivantes, laquelle caractérise un fichier contenant des données que l'on peut associer à un tableau de pixels ?","theme":"C","nume":"2","sujet":9,"annee":2020},{"radio":[{"label":" pdf"},{"label":" xls","sol":true},{"label":" png"},{"label":" exe"}]}],[{"text":"Laquelle de ces affirmations est vraie ?","theme":"C","nume":"6","sujet":9,"annee":2020},{"radio":[{"label":" on peut ouvrir un fichier CSV à l'aide d'un tableur","sol":true},{"label":" un fichier CSV permet de gérer l'apparence du code dans l'éditeur"},{"label":" un fichier CSV permet de gérer l'apparence d'une page HTML"},{"label":" un fichier CSV contient un programme à compiler"}]}],[{"text":"On exécute le code suivant : collection = [('Renault', '4L', 1974, 30), ('Peugeot', '504', 1970, 82), ('Citroën', 'Traction', 1950, 77)] Que vaut collection[1][2] ? ","theme":"C","nume":"3","sujet":10,"annee":2020},{"radio":[{"label":" 1970","sol":true},{"label":" '4L'"},{"label":" ('Peugeot', '504', 1970, 82)"},{"label":" ('Renault', '4L', 1974, 30)"}]}],[{"text":"On exécute le script suivant : notes = {\"Paul\": 12, \"Jean\": 16, \"Clara\": 14, \"Aïssa\": 18} t = list(notes.keys()) Quelle est la valeur de t à la fin de cette exécution ? ","theme":"C","nume":"5","sujet":11,"annee":2020},{"radio":[{"label":" Paul"},{"label":" [\"Paul\", '\"Jean\", \"Clara\", \"'Aïssa']","sol":true},{"label":" [12, 16, 14, 18]"},{"label":" [ \"Paul\": 12, \"Jean\": 16, \"Clara\": 14, \"Aïssa\": 18 ]"}]}],[{"text":"Un fichier CSV ...","theme":"C","nume":"1","sujet":12,"annee":2020},{"radio":[{"label":" ne peut être lu que par un tableur"},{"label":" est l'unique format utilisé pour construire une base de données"},{"label":" est un fichier texte","sol":true},{"label":" est un format propriétaire"}]}],[{"text":"On définit : T = [ {'fruit': 'banane', 'nombre': 25}, {'fruit': 'orange', 'nombre': 124}, {'fruit': 'pomme', 'nombre': 75}, {'fruit': 'kiwi', 'nombre': 51} ] Quelle expression a-t-elle pour valeur le nombre de pommes ?","theme":"C","nume":"6","sujet":13,"annee":2020},{"radio":[{"label":" T[2]['nombre']","sol":true},{"label":" T[2,'nombre']"},{"label":" T[3]['nombre']"},{"label":" T[3,'nombre']"}]}],[{"text":"On exécute le code suivant : a = [5, 4, 3, 4, 7]
a.append(4) Quelle est la valeur de la variable a à la fin de cette exécution ?
","theme":"C","nume":"1","sujet":14,"annee":2020},{"radio":[{"label":"2"},{"label":" [4, 4]"},{"label":" [5, 4, 3, 4, 7, 4]","sol":true},{"label":" True"}]}],[{"text":"Les données clients d’une entreprise sont stockées dans un fichier csv.
Afin de les importer, on effectue une lecture séquentielle de ce fichier par ligne. On affecte à la variable ligne le contenu d’une ligne de ce fichier. La variable c est alors définie ainsi : ligne = \"dupont;arnaud;245862;france\"
c = ligne.split(;) Que contient cette variable c ?
","theme":"C","nume":"2","sujet":14,"annee":2020},{"radio":[{"label":" \"dupontarnaud245862france\""},{"label":" [\"dupont\", \"arnaud\", \"245862\", \"france\"]","sol":true},{"label":"3"},{"label":" \"dupont\""}]}],[{"text":"Que réalise l'instruction suivante : mon_fichier = open(\"exemple.txt\", \"r\")","theme":"C","nume":"4","sujet":14,"annee":2020},{"radio":[{"label":" Elle permet d’ouvrir le fichier \"exemple.txt\" en mode lecture si le fichier est dans le même dossier que le fichier du programme Python comportant cette instruction.","sol":true},{"label":" Elle permet d’ouvrir le fichier \"exemple.txt\" en mode lecture même si le fichier n’est pas dans le même dossier que le fichier du programme Python comportant cette instruction."},{"label":" Elle permet d’ouvrir le fichier \"exemple.txt\" en mode écriture si le fichier est dans le même dossier que le fichier du programme Python comportant cette instruction."},{"label":" Elle permet d’ouvrir le fichier \"exemple.txt\" en mode écriture même si le fichier n’est pas dans le même dossier que le fichier du programme Python comportant cette instruction."}]}],[{"text":"Quelle expression Python permet d’accéder au numéro de téléphone de Tournesol, sachant que le répertoire a été défini par l’affectation suivante : repertoire = [ {'nom':'Dupont', 'tel':'5234'}, {'nom':'Tournesol', 'tel':'5248'}, {'nom':'Dupond', 'tel':'3452'}]","theme":"C","nume":"6","sujet":14,"annee":2020},{"radio":[{"label":" repertoire['Tournesol']"},{"label":" repertoire['tel'][1]"},{"label":" repertoire[1]['tel']","sol":true},{"label":" repertoire['Tournesol'][tel]"}]}],[{"text":"Quelle est la valeur de x après exécution du programme ci-dessous ? t = [[3,4,5,1],[33,6,1,2]]
x = t[0][0] for i in range(len(t)): for j in range(len(t[i])):
if x < t[i][j]: x = t[i][j]
","theme":"C","nume":"2","sujet":17,"annee":2020},{"radio":[{"label":"3 "},{"label":"5 "},{"label":"6 "},{"label":" 33","sol":true}]}],[{"text":"Quel type de fichier est le plus adapté au traitement des données?","theme":"C","nume":"1","sujet":22,"annee":2020},{"radio":[{"label":" PNG"},{"label":" PDF"},{"label":" CSV","sol":true},{"label":" DOC"}]}],[{"text":"Quelle est la valeur de la variable image après exécution du programme Python suivant ? image = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] for i in range(4): for j in range(4):
En poursuivant votre navigation sur mon site,
vous acceptez l’utilisation des Cookies et autres traceurs
pour réaliser des statistiques de visites et enregistrer
sur votre machine vos activités pédagogiques.En savoir plus.