Archives de catégorie : Cryptographie. Chiffrement

Cette catégorie regroupe des informations sur la cryptographie de manière générale, et sur le chiffrement. L’actualité fait hélas de plus en plus mention de failles liées aux processus de sécurisation et de chiffrement.

Parmi les sites expliquant les principes et les bases, bibmath.net est très clair et très fourni.

TrueCrypt

Que penser de TrueCrypt ? C’est l’un des plus étonnants mystères de ces dernières années dans le petit monde de l’informatique.

TrueCrypt est un utilitaire permettant de chiffrer ses documents, voire des volumes entiers sur vos disques plus ou moins durs. Très utilisé, et même recommandé par des personnes de confiance, l’utilitaire a disparu du jour au lendemain (littéralement), sans donner d’explication convaincante1. D’autant plus étonnant que des initiatives avaient abouti à la réalisation d’un audit du code (qui est à peu près en open source), sans que l’on trouve en première approche de grosse faille ou de faiblesse particulière, à peine un mois plus tôt. Par ailleurs, en 2013, l’ANSSI avait fait réaliser une certification de premier niveau (CSPN), c’est-à-dire que fonctionnellement il répond bien à la cible de sécurité choisie.

Une communication discrète…

L’équipe de développement s’est toujours montrée discrète, ce qui est la fois un gage de sécurité (au sens où il est alors difficile de faire pression sur les auteurs) mais aussi une source d’inquiétude car il est alors impossible de connaître la notoriété ou la réputation des personnes impliquées.

…jusqu’à la fermeture !

Car ce jour là, le site fut modifié brutalement pour indiquer que le logiciel ne devait plus être considéré comme sûr, et qu’il fallait se tourner vers BitLocker, le produit de chiffrement de Microsoft dont la sécurité est difficilement évaluable puisqu’il s’agit d’un produit commercial, dont les sources sont inconnues (le retro engineering étant interdit sur les produits Microsoft), et surtout en provenance d’un éditeur soumis comme tous les autres à la législation américaine et aux agences fédérales.

Pourquoi ?

On nage alors dans le paradoxe : les développeurs de l’outil permettant d’échapper au big brother promeuvent d’un seul coup un outil sur lequel plane la suspicion ! Certains penchent pour un gag order, qui consiste en une obligation de silence, pratique relativement usuelle en droit anglo-saxon, en lien avec par exemple une interdiction de continuer à développer le logiciel (j’imagine) ou l’obligation d’y inclure une porte dérobée, ce qu’auraient refusé évidemment les développeurs.

D’autres pensent à de gros problèmes de structure et de conception, n’induisant pas de faille majeure au moment de l’examen du code, mais que les avancées technologiques rendent nécessaires de revoir, avec un coût de réécriture trop important pour les développeurs.

On peut aussi penser que c’est par lassitude, ou suite à la découverte de leur propre chef d’une faille trop importante, mais cela me semble peu probable au vu de leur communication quasi-provocatrice.

Par ailleurs, la dernière version publiée (7.2) de l’outil a été expurgée de toutes les parties de code concernant le chiffrement, ne laissant à l’utilisateur que la possibilité de déchiffrer ses données, pour ne pas les perdre, mais sans plus pouvoir les protéger. Pourquoi s’en donner la peine ? Sauf dans le cas d’une faille béante dans le mécanisme de chiffrement qui le rendrait impropre à une protection correcte des données, mais aucun des audits postérieurs à cet arrêt n’a révélé de tels problèmes.

Peut-on encore l’utiliser ?

Certains le font. En tout cas la version 7.1a2, la dernière contenant toutes les fonctionnalités et qui a été auditée, sans qu’on n’y trouve de faille sévère.

Il existe un site web assez curieux, truecrypt71a.com, qui se prétend extérieur au projet mais dont l’auteur connaît parfaitement tous les détails de TrueCrypt, et où certains passages sont rédigés à la 1ère personne (« nous », en parlant du développement de TrueCrypt). C’est une mine de renseignements, et on peut y trouver les sources et les binaires (avec des éléments d’identifications comme des signatures GPG).

Comment monter un conteneur sous Linux ?

J’ai dû me poser la question (pour le boulot), et on peut très bien le faire sans installer TrueCrypt. Il faut toutefois installer cryptsetup, un utilitaire permettant une configuration un peu plus simple (car il y a en réalité tout un tas d’autres outils mis en oeuvre).

Sur un Raspberry, sous Raspbian 10, il faut installer les packages suivants :

  • cryptsetup_1.7.3-4_armhf.deb
  • cryptsetup-bin_1.7.3-4_armhf.deb
  • libcryptsetup4_1.7.3-4_armhf.deb

On les trouve sur le site officiel de Raspbian, à l’adresse https://archive.raspbian.org/raspbian/pool/main/. Les numéros de versions changeront au fur et à mesure des mises-à-jour.

Ensuite il y a une petite manip, en trois étapes (trouvée ici) :

  • Attacher le fichier conteneur à un périphérique virtuel (loopback device) ;
  • Ouvrir le conteneur avec cryptsetup ;
  • Enfin monter le conteneur dans le filesystem.

En pratique :

$ sudo losetup /dev/loop0 nom_fichier_conteneur
$ sudo cryptsetup --type trcrypt open /dev/loop0 nom_conteneur
$ sudo mount /dev/mapper/conteneur point_de_montage

On peut donner n’importe quel nom au conteneur, qui sera ensuite accessible via /dev/mapper/nom_conteneur. On peut vérifier la 1ère étape comme suit :

$ losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE     DIO LOG-SEC
/dev/loop0         0      0         0  0 /jean/test.tc   0     512

Sources

Clé SSH

Une clé SSH est en réalité une bi-clé (un couple clé publique et clé privée) permettant de renforcer la sécurité d’une connexion utilisant le protocole SSH (à condition bien sûr de respecter quelques règles de base).

L’idée de base est qu’on chiffre la connexion à l’aide de la bi-clé, la clé publique étant sur la machine cible, la clé privée étant chez l’utilisateur (ou la machine source éventuellement).

Principe

L’idée de ce type d’authentification est de ne pas faire circuler de secret directement pour l’établissement de la connexion (tel que le couple utilisateur/mot de passe). Ainsi, le mot de passe ne peut pas être intercepté lors de la communication !

Nous utiliserons donc une bi-clé. Pour se connecter sur un serveur (machine 2) avec une identité donnée, il faut (il suffit) d’associer la clé publique à l’identité voulue sur le serveur, et de prouver qu’on est en possession de la clé privée correspondante.

Pour établir la connexion, les deux machines qui parlent ensemble (la machine 1 de l’utilisateur, et la machine 2 où l’on souhaite se connecter de façon sécurisée) vont s’envoyer des messages chiffrés grâce à cette bi-clé. Toute la subtilité revient dans le mécanisme d’échange sécurisé entre les deux machines,

Pour envoyer des éléments chiffrés lors de l’échange, l’utilisateur sur la machine 1 doit donc utiliser sa clé privée, qu’il vaut mieux bien sûr protéger par une passphrase (il faut qu’elle soit protégée en accès afin que tout le monde ne puisse pas lire cette clé). La capacité que l’on a d’utiliser cette clé privée permet donc de prouver qu’on est bien l’utilisateur correspondant à la clé publique, ce qui assure l’accès à la machine 2, avec l’identité à laquelle on a associée la clé publique.

En pratique

Création de la bi-clé

La première étape est de construire la bi-clé, et différents outils le permettent.

ssh-keygen

Tout en ligne de commande. Il y a tout de même une astuce si vous souhaitez ensuite vous connecter à partir de PuTTY sous Windows (cf ci-dessous).

PuTTYgen

Très pratique sous Windows.

Installation de la clé publique

La clé publique doit être positionnée dans un fichier spécial, spécifique à l’identité demandée sur le serveur cible. Si vous souhaitez utiliser le mode de connexion par clé SSH pour l’utilisateur root, il faudra donc installer la clé publique dans le répertoire utilisateur de root (qui est en général /root). Si vous souhaitez utiliser une clé pour un utilisateur user, il faudra installer la clé publique dans le répertoire de l’utilisateur user (qui est en général de la forme /home/user).

Une fois dans le répertoire de l’utilisateur voulu sur la machine cible, il faut aller dans le répertoire .ssh puis modifier le fichier authorized_key (il peut y avoir des variantes, selon les configurations).

machine2$ vi /home/user/.ssh/authorized_key

Ce fichier contient les clés publiques autorisées pour cet utilisateur, au format ssh-rsa (ou ssh-dsa). Par exemple :

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAjMMXnPG6n5j39K924xSAdsxQ6KD0QS55sdw+
s/AB+EkfNJ4l5rWAesm1KhyjsTTb399lOAhDr26qmHt4Zt8yXZzfuwWA+MQI6QL0
PwR2gL6B9F7ogJtqqTmPiXTXu8fTLvzFYW+1VejHfSNBEBuE0Td5R4LjEXcmxorf
vrODeIzQaz5wk2anXaCjRVBiiPi69l4n8YCHyqVPcuiHBxRxAfQMjLpo2RYL6ofb
ZzaxHnQfvfs0h+YntFXDTVL3sMuU8zhyGrGdfI9MpYymDb8Y3hd/4MAUhUrgtg57
88Pbp/xfX79b+qB4QRjnvNLTLi4biPKqU1pbYlvkuhx/aO36qQ==

Installation et utilisation de la clé privée

Connexion sous Linux

La connexion se fait en ajoutant quelques paramètres à la commande ssh.

Connexion sous Windows

PuTTy fait sous Windows un petit caprice au sens où il va demander un format particulier pour la clé privée.

Sources

Voir également

Clé de chiffrement

Une clé de chiffrement est le code secret permettant de chiffrer ou déchiffrer un message codé. Il existe des clés symétriques et asymétriques, qui ont chacune leurs propriétés et leur utilité.

Clé symétrique

Une clé est dite symétrique quand la même clé permet de chiffrer et de déchiffrer un message. On parle aussi d’algorithme symétrique pour un algorithme utilisant des clés symétriques.

Un des principaux inconvénients est la difficulté de transmission de cette clé, car il faut s’assurer que les deux parties s’échangeant un message chiffré par cette clé soient bien les seules à la connaître. Cette clé doit restée privée pour que le secret soit conservé.

L’avantage pratique principal de ce type de clé (et de ce type de chiffrement) est qu’informatiquement, le chiffrement ou déchiffrement à partir d’un algorithme symétrique est très rapide, surtout en comparaison des clés asymétriques.

Clé asymétrique

Le principe est que la clé servant à chiffrer et à déchiffrer sont différentes. L’utilisation de ce type de clé a permis une avancée considérable en cryptographie, car on peut ainsi chiffrer et déchiffrer des messages sans avoir à communiquer de clé privée. L’utilisation de certificats repose sur l’usage de telles clés, tout comme la connexion SSH par clé.

Le principal inconvénient est la lenteur des calculs nécessaires à ce type de chiffrement. Ainsi, lorsqu’on a de longs messages à échanger, on utilise en pratique une clé symétrique ad hoc échangée entre les deux parties par un mécanisme asymétrique.

Voir aussi

Echange de clé

Echange de clé

Un des points majeurs en cryptographie est l’échange des clés : un algorithme de chiffrement peut être le meilleur du monde, s’il est facile de connaître les clés utilisées par chacune des parties lors du chiffrement, il n’y a plus aucun secret dans l’échange !

Diffie Hellman Merkle

Cet algorithme permet à deux parties d’échanger (ou plus précisément de construire) une clé symétrique secrète commune. Il existe une variante basée sur les courbes elliptiques.