Confort de travail de l'internaute: identification par signature unique, versions multilingues
Un ingénieur sécurité devra appliquer une politique définissant le réseau hostile et le réseau à protéger, ainsi que les échanges permis aux utilisateurs.
Il doit séparer les serveurs de la machine pare-feu. Il aura intérêt à faire exécuter par des machines différentes les opérations de filtrages et celles de routages. Ce filtrage doit aussi se faire au niveau supérieur, c'est à dire celui des applications; mais ce cas demande des puissances de traitement plus importantes que le filtrage de paquets.
Il n'aura pas d'à-priori et devra envisager que les comportements hostiles peuvent provenir aussi bien de l'intérieur que de l'extérieur. Ne pas oublier que les accès hostiles ne réussissent que parce qu'il y a des failles de sécurité dans les logiciels.
La cryptographie est une science remontant à l'antiquité. Les messages chiffrés étaient principalement utilisés dans le domaine militaire et dans la diplomatie. Ce n'est que depuis une trentaine d'années qu'ils sont aussi utilisés dans le domaine commercial.
Intercepter des données qui transitent sur un réseau est peu intéressant si elles sont publiques, mais le devient grandement si elles sont confidentielles et intelligibles. D'où la nécessité de chiffrer les données confidentielles, afin qu'elles ne soient intelligibles que pour leur destinataire.
Une grande partie de la cryptographie actuelle se fonde sur l'arithmétique, et les propriétés de certains algorithmes utilisés ne sont pas toutes démontrées à l'heure actuelle. On espère que le nombre d'opérations nécessaires pour casser les codes utilisés, par des recherches systématiques (facilement programmables sur une machine) est astronomique, et que les temps d'exécution sont de plusieurs années, sur les machines les plus performantes.
Faisons des évaluations en se posant la question de découvrir une valeur
codée sur 100 bits, soit 2100 possibilités, ou encore
1030 cas environ. Si la fréquence de traitement est de 1 giga
cas par seconde, soit 1012 Hz, il faut prévoir un temps de
1018 secondes, ou en comptant 3*107 secondes dans
une année, un temps de 3*1010 années. C'est décourageant !
Si vous conjuguez les efforts d'un million de processeurs, tournant
en parallèle, à cette tâche, le temps n'est plus que de ... 30 000
années !
La conclusion est immédiate: ce n'est pas une recherche systématique et aveugle qui permet de casser un code, basé sur une clé d'une centaine de bits.
On parle d'intégrité des données lorsque le message reçue est identique au message envoyée. Les techniques de calcul de hashcode, sur les octets d'un fichier ( utilisée depuis une trentaine d'année), fournissent une empreinte ou un résumé du message, permettant de tester l'intégrité. Les algorithmes MD2, MD4, MD5 calculent des empreintes sur 8 octets (MD: message digest).
La confidentialité des données correspond à l'impossibilité pour un tiers de comprendre le message. L'authentification du signataire doit être garantie par la signature digitale et comprend deux volets; être assuré de l'identité du signataire d'une part et être sûr que celui-ci ne peut répudier les informations envoyées.
Chacun de ces concepts est traité par des techniques différentes; le problème d'intégrité, le plus simple, est résolu par des algorithmes de condensation ou hachage. La confidentialité qui est justement l'objet du chiffrement est traité par des algorithmes cryptographiques. L'authentification est traitée par combinaison des deux techniques.
Actuellement, on ne cherche pas de méthode de codage infaillible, mais seulement une méthode pour laquelle le temps de reconstitution du texte clair est très long même en utilisant plusieurs machines de forte puissance. En effet dans quasiment tous les cas, l'information codée ne présente plus d'intérêt quelques dizaines d'années plus tard.
Un peu de formalisation pour aider à saisir les appellations
différentes.
Coder un texte t correspond à lui appliquer une
fonction, dite de chiffrement, qu'on note C, dépendant d'une clé
notée K. Cela donne un message m.
Pour décoder m, on lui applique une autre fonction D
(qui est peut être identique à C) dépendant d'une clé L.
On obtient un texte u. Si le décodage correspond au codage, on
doit avoir u et t identiques.
chiffrement: m = CK(t) déchiffrement: u = DL(m) reconstitution correcte: DL( CK(t) ) = t
Dans un algorithme à clé secrète, ou algorithme symétrique, ou
algorithmes à clé de session, il existe une seule clé: K = L.
La transmission de cette clé entre la personne qui envoie un message et
celle qui le reçoit, et a besoin de la clé pour décoder, est un point
faible, pour l'utilisation des algoritmes de chiffrement symétriques.
Le DES (Data Encryption Standard) et sa version plus récente AES
(Advenced Encryption Standard) est le plus connu des algorithmes
symétriques;
c'est un standard USA.
Dans un algorithme à clé publique ou algorithme
dissymétrique, K et L sont différents; K est la clé publique et L
est la clé privée.
Si Alfred veut envoyer un texte t
à Bibi, que seul Bibi doit lire, Alfred utilise la
clé publique K de Bibi et fait passer m=CK(t)
sur le réseau.
Seul Bibi, qui possède la clé privée L associée à
K, pourra décoder
le message, c'est à dire évaluer DL(m), et obtenir t,
le texte émis par Alfred.
Le RSA (initiales des auteurs: Rivest Shamir Adleman) est un
algorithme à clé publique très utilisé.
Un texte long est découpée en tranches et chaque tranche est codée; le message transmis est un assemblage de ces tranches, avec des informations supplémentaires comme par exemple une empreinte et une signature qui sont également codées.
Les opérations t → CK(t) et m → DL(m) doivent être rapides, surtout pour les échanges en temps réels.
La machine de l'expéditeur s'adresse au serveur le plus proche
qui peut être une machine du fournisseur d'accès internet, où
une machine dédiée d'un réseau local. Le dialogue vers ces serveurs
de messagerie est régi par le protocole SMTP (simple mail
transfert protocol); le même protocole est
utilisé entre les serveurs. Ces échanges utilisent le transport par TCP.
Le programme sendmail réalise ce traitement.
La machine du destinataire demande à son propre serveur de messagerie
si du courrier est en attente, en utilisant le protocope POP3 (post office
protocol, version 3).
Le programme fetchmail réalise la réception du courrier.
Dans la pratique, un seul utilitaire, plus ou moins élaboré (messenger, outlook, eudora, pine ...) réalise les deux opérations, et même fournit d'autes fonctionalités, comme la mémorisation du courrier, l'expédition à plusieurs destinataires du même courrier ...
Ces protocoles sont particulièrement simples, mais ne garantissent rien
au niveau de la confidentialité ni de l'assurance que le courrier a été
délivré. Un nouveau protocole, IMAP, plus fiable, tend à les remplacer;
il n'a pas de fonction de confidentialité car les informations circulent
en clair sur le réseau.
Pour assurer la confidentialité des échanges il faut ajouter des modules
de codage et décodage entre la machine d'un utilisateur et le serveur des
messagerie. On peut même ajouter un module qui limite la réception du
courrier afin de ne pas être géné par la publicité non désirée.