Outils pour utilisateurs

Outils du site


inventions-informatique

Les plus belles inventions en informatique

Par manque de motivation+temps, cette page va probablement être abandonnée.

Je tente de lister ici ce qui - à mon humble avis - représente les plus belles inventions ou réalisations en informatique. Avec leurs applications. J'ai essayé dans cette page d'être accessible: Les spécialistes me pardonneront donc les approximations effectuées au nom de la compréhension.

Cette page est une ébauche.

Le chiffrement asymétrique

On ne dit pas "Crypter un fichier avec un mot de passe" car c'est incorrect: On dit chiffrer un fichier avec une clé.

Instinctivement, on se doute bien qu'on prend la même clé pour chiffrer et déchiffrer le fichier.

Mais il existe des algorithmes pour lesquels la clé de déchiffrement est différente de la clé de chiffrement, et on ne peut pas déduire une clé de l'autre. Cela paraît presque magique, mais c'est possible. Typiquement, l'algorithme RSA (basé sur les nombres premiers) permet cela.

Imaginez: Je peux distribuer ma clé de chiffrement à tout le monde. Elle est publique. Tout le monde est ainsi capable de chiffrer les messages qui me sont destinés. Mais moi seul peut les déchiffrer avec ma clé de déchiffrement (qui est privée). (Pour un exemple concret, voir cette page).

L'algorithme RSA (ainsi que bien d'autres tel que Diffie-Hellman) sont à la base de toute la sécurité informatique moderne. Typiquement, votre navigateur l'utilise quand vous avez une adresse en https://...

8-) À quoi ça sert ?

Sans les algorithmes de chiffrement asymétriques, nous ne pourrions pas échanger de manière sûr des données avec des personnes que nous n'avons jamais rencontrées. Il nous faudrait trouver préalablement un canal d'échange sûr pour échanger les clés de chiffrement, ou même devoir rencontrer en personne vos interlocuteurs avant tout échange, ce qui rendrait les choses bien plus compliquées.


Les fonctions de hashage

Le hashage est une fonction qui prend des données de n'importe quelle taille en entrée, et qui donne en sortie une courte suite de chiffres appelée empreinte (ou hash), de taille fixe. Elle a une particularité intéressante:

Les mêmes données en entrée donneront toujours le même hash en sortie. Un hash est donc comme une empreinte digitale des données.

Il existe différentes fonctions de hashage (md5, sha1, sha256…). Faisons un essai avec md5. Vous pouvez par exemple tester sur ce site: http://www.md5.cz/

données en entréehash (md5)
bonjourf02368945726d5fc2a14eb576f7276c0
Bonjourebc58ab2cb4848d04ec23d83f7ddf985
Les hommes naissent et demeurent libres et égaux en droits. Les distinctions sociales ne peuvent être fondées que sur l'utilité commune.a38d001561c8dc8c7304a6de7dc085f6
Les hommes naissent et demeurent libres et egaux en droits. Les distinctions sociales ne peuvent être fondées que sur l'utilité commune.7c42315c80eaa481e7d5db348bb2fdce

Comme vous pouvez le voir:

  • Quelle que soit la longueur des données en entrée, la fonction de hashage a une taille fixe en sortie. (La taille dépend de la fonction de hashage.)
  • Chaque hash est unique, et spécifique à ce qui a été mis en entrée.
  • La moindre modification en entrée (même une seule lettre ou un accent) changement complètement la sortie.

Et plus particulièrement, les fonctions de hashage ont les propriétés suivantes:

  • La valeur du hash n'est pas prédictible.
  • Il n'est pas possible de déduire ce qu'il y avait en entrée à partir du hash seul (sauf si on essaie toutes les combinaisons possibles de données en entrée).
  • Il n'est pas possible de construire des données en entrée ayant un hash voulu (enfin, pas facilement).

(Ces deux dernière affirmations sont généralement vraies, si on excepte les quelques faiblesses découvertes dans certaines fonctions de hashage).

Il existe différentes fonctions de hashage, ayant une sortie plus ou moins longue. md5 et sha1 sont très courantes, mais tout le monde passe de plus en plus à d'autres fonctions comme sha256. Exemples:

Données en entréeBonjour
md5ebc58ab2cb4848d04ec23d83f7ddf985
sha1f30ecbf5b1cb85c631fdec0b39678550973cfcbc
sha2569172e8eec99f144f72eca9a568759580edadb2cfd154857f07e657569493bc44
sha512c447dff0d671f62ad580b255b64f7a8f6a30d1b828569cee08b7c861239f8d4856ef38a1166718b045a9713876336c1f623619f6a78fc891d48d0b98c703def3
Tigerebbd658136f1711d56d80b6aa8e2b55244518c4d5ca42894

8-) À quoi ça sert ?

Ça sert, par exemple

  • à s'assurer que les données n'ont pas été modifiées ou corrompues lors du transfert d'un ordinateur à l'autre. Voici comment on procède:
    • On transmet les données + le hash.
    • À la réception, on recalcule le hash sur les données, et on vérifie que les deux hashs correspondent.

inventions:verification-hash.png

  • à s'assurer que les données ne sont pas endommagées lors de stockage ou transformations:
    • par exemple les archives zip/rar/7z stockent des hashs des fichiers, et les vérifient lors de la décompression.
    • les disques durs écrivent des sommes de contrôle (ou hash) en plus des données, ce qui permet de détecter les secteurs défectueux lors de la lecture, et d'en informer le système d'exploitation.
  • à "signer des documents": Pour signer un document électronique, les deux parties signent juste le hash du document. Comme le hash est unique aux données, c'est équivalent à signer le document lui-même. (Et comme on ne peut pas créer de toutes pièces un document ayant un hash voulu, on ne peut pas le falsifier.)
  • C'est utilisé dans BitTorrent pour identifier de manière unique chaque téléchargement, ainsi que contrôler l'intégrité des fichiers téléchargés.
    • Par exemple, le hash du torrent de Linux Mint 19.3 Mate est 90f700358946c85c6dd5244c34c5304810bd9d28. Vous retrouvez ce hash dans les liens Magnet: magnet:?xt=urn:btih:90f700358946c85c6dd5244c34c5304810bd9d28&dn=linuxmint-19.3-mate-64bit.iso
  • Il existe même une forme particulière de hash dans laquelle on met en entrée les données et une clé. On obtient en sortie un hash, mais on ne peut calculer le bon hash que si on a les bonnes données et la bonne clé. Exemple: HMAC-SHA1 (à compléter).

À faire

  • ssh
  • rsync
  • les codes correcteurs d'erreur (Reed-Solomon, par2…)
  • Le P2P, notamment BitTorrent (et ce qui va avec: DHT, PEX…)
  • l'émulation et les machines virtuelles (y compris celles des langages: java, javascript, python, .Net.. qui émulent des processeurs fictifs)
  • Le Copy-On-Write (cas pratique: btrfs)
  • La compression (les rapides génériques (lzo, lz4), les performants génériques (lzma), les spécialisés non destructifs (flac), les spécialisés destructifs (vorbis, av1, opus…))
  • La déduplication (cas pratiques: 7z, borg, btrfs..)
  • Les bases de données relationnelles (avantages: gestion de gros volume de données (indexation), modifications en masse (opération ensemblistes et groupage), intégrité des données (contraintes, transactions, ACID…). Souvent regardé de haut pas les développeurs qui les considèrent comme de la basse besogne pas intéressante.
  • Le wiki
  • les flux, les pipes (à la base de la phylosophie Linux: un programme qui ne fait qu'une seule chose mais qui la fait bien, et le pipe pour les lier).
  • OTP (TOTP, HOTP)

Voici ce que je considère comme étant les plus belles inventions en informatique. Notez que je ne prétends absolument pas être exhaustif.

  • La cryptographie à clés publiques (Diffie-Hellman, RSA)
  • Les hashs (crc32, md5, sha1, sha256…)
  • HMAC et ses applications (TOTP/HOTP)
  • rsync, les rolling-hash
  • ssh
  • Reed-Solomon et les codes correcteurs d'erreur (application pratique: par2)
  • SQLite
  • DHT
  • la compression lossless (lz77, zstd, lzma…)
  • la compression lossy (fourrier (JPEG,mp3), wavelet (ogg/vorbis), opus, AV1…)
  • les systèmes de fichiers Copy-On-Write (btrfs, xfs…)
inventions-informatique.txt · Dernière modification : 2022/02/02 10:17 de sebsauvage