Programmation orientée objet


Ce qu’il faut savoir :

La programmation orientée objet (poo) est un paradigme de programmation qui repose sur la notion de classe, la notion d’attribut et la notion de méthode (la poo repose aussi sur les notions d’héritage et de polymorphisme, mais ces 2 notions ne sont pas au programme de NSI).

En poo on travaille sur des objets (des instances plus exactement), chaque instance est créée à partir d’un “moule” : la classe. Les attributs représentent l’état d’un objet alors que les méthodes représentent le comportement d’un objet.

Ce qu’il faut savoir faire :

Exemple 1 : Point, Segment du plan


			
Exemple 2 : Les nombres complexes

En mathématiques, dans un plan rapporté à un repère orthonormé tout point M de coordonnées (x;y) peut être représenté par ce que l'on nomme un nombre complexe, qui peut s'écrire sous la forme : z = x +iy.

On dit que x est la partie réelle de z et y sa partie imaginaire i est un nombre complexe dont le carré est égal à -1 : i² = -1

En posant z = x + iy et z' = x' + iy', on définit alors les opérations suivantes :

De plus z = z' ssi x = x' et y = y'

Ecrire en Python une classe Complexe :

Tester cette classe avec les nombres z = -3 + i et z' = 7 + i


			

Diviser pour régner


On prend un problème (généralement complexe à résoudre), on divise ce problème en une multitude de petits problèmes, l'idée étant que les "petits problèmes" seront plus simples à résoudre que le problème original. Une fois les petits problèmes résolus, on recombine les "petits problèmes résolus" afin d'obtenir la solution du problème de départ.

Le paradigme "diviser pour régner" repose donc sur 3 étapes :

Les algorithmes basés sur le paradigme "diviser pour régner" sont très souvent des algorithmes récursifs.

Exemple 1 : la recherche par dichotomie

		
Exemple 2 : l'algorithme de tri-fusion

		
Exemple 3 : Minimum d'une liste
s
		

Sécurisation des communications - Cryptographie


Les communications, qu’elles soient entre humains, entre humains et machines, ou entre machines, peuvent être interceptées par différents moyens, parfois surprenants. Il est donc important de les protéger, que ce soit pour protéger sa vie privée ou pour éviter un piratage. Pour protéger ces communications, on chiffre les messages à l’aide d’une méthode de cryptographie, comportant une ou plusieurs clés secrètes. Les deux principes de chiffrement sont le chiffrement symétrique, où la même clé est utilisée pour le chiffrement et le déchiffrement du message, et le chiffrement asymétrique, où deux clés différentes sont utilisées. Reste à assurer que les clés ne soient pas piratées, ce qui est le problème de l’authenticité des utilisateurs. La sécurité des communications dépend à la fois des méthodes de chiffrement et des protocoles d’échange des clés.

Vocabulaire : chiffrer/déchiffrer s’utilise pour transformer un message clair en message codé à l’aide d’une clé. Décrypter, c’est casser le code sans connaître la clé.

Chiffrement symétrique

Dans le chiffrement symétrique, la même clé permet à la fois de chiffrer et de déchiffrer le message. La clé secrète doit donc être connue préalablement par les deux entités communiquant. On peut remarquer que si la clé fait la taille du message (ou plus), alors le message ne peut pas être décrypté. Comme dit en introduction, il faut également échanger cette clé au préalable, sans qu’elles ne soient interceptées !

Exemples de chiffrements à clef symétrique

Chiffrement asymétrique

Lors du chiffrement asymétrique, deux clés sont utilisées, l’une privée (secrète) et l’autre publique. La clé publique permet de chiffrer le message, et la clé privée permet de le déchiffrer. Comme leur nom l’indique, la clé privée n’est pas transmise, contrairement à la clé publique.

Le principe a été imaginé en 1976 par Diffie et Hellman, mais sans algorithme correspondant. En 1978 Rivest, Shamir et Adleman inventent l’algorithme RSA. Les services secrets anglais avaient déjà imaginé des concepts semblables quelques années plus tôt, mais ont gardé ces recherches secrètes jusqu’en 1997.

Ces protocoles reposent sur l’asymétrie des fonctions utilisées (fonctions dites à sens unique). Par exemple, dans RSA on utilise le produit de deux nombres premiers. Autant il est facile d’effectuer une multiplication de deux nombres premiers, autant il est difficile d’obtenir la décomposition de ce produit en les deux nombres d’origine.

Des fonctions Python utiles pour chiffrer et déchiffrer des messages composés de caractères ASCII :

Protocoles hybrides

Les protocoles asymétriques sont difficiles à casser mais lents. Les protocoles symétriques sont rapides, mais nécessitent l’échange préalable des clés. Les protocoles hybrides utilisent les deux méthodes. RSA peut par exemple être utilisé pour échanger une clé de protocole symétrique.

Par exemple, TLS/SSL (le « https ») utilise en partie un chiffrement asymétrique, pour initialiser la connexion client/serveur, et créer une clé symétrique utilisée pour la suite de la session. Ce protocole mélange donc les deux types de chiffrement. Cette méthode est couplée avec un mécanisme d’authentification : l’utilisation des certificats de sécurité, confiés à un tiers de confiance.

Exemple : https

Le protocole http permet d’échanger des données entre client et serveur. En première, on voit deux possibilités de http avec les méthodes GET et POST. Ce protocole n’est pas sécurisé, il n’est donc pas adapté à tous les échanges de données sur le web. https rajoute à http une couche de sécurité, la couche TLS (plus sûre que SSL).

Les protocoles de communication commencent par une mise en relation des entités. On appelle souvent cette mise en relation la « poignée de mains » (handshake).

  • La vérification de la signature se fait auprès d’autorités extérieures (les tiers de confiance).
  • La clé symétrique est une clé AES, qui est chiffrée avec la clé publique du serveur. Elle ne sert que pour une seule session : une autre clé est générée s’il y a déconnexion et reconnexion.
  • La clé symétrique est déchiffrée par le serveur avec sa clé privée : on utilise deux protocoles successivement. Protocole asymétrique pour la poignée de mains, puis protocole symétrique pour l’échange des données.

Le futur

Les protocoles actuels sont très solides, les coûts de décryptage étant prohibitifs. Par contre, avec un ordinateur quantique ils seront cassés très rapidement. Il faudra alors passer à des méthodes de cryptographie quantique. Notamment, lors de transmissions de paquets quantiques, une éventuelle interception est toujours détectable (elle modifie la nature du paquet transmis). Cela permet au moins de savoir que la communication a été interceptée.