Chiffrement OpenPGP de mots de passe et carte NFC Fidesmo

Fidesmo NFC card
OpenPGP est un standard libre permettant le chiffrement et la signature de messages de façon asymétrique. Il s’agit du principe des clés publiques et privées décrit dans un précédent billet. Les implémentations libres de openPGP le rend accessible à tous, d’autant plus qu’il n’y a pas de dépendance envers une autorité externe de certification de l’identité des contacts. La confiance dans l’identification de usagers provient du réseau de relations de chaque usager.
Sans tomber dans la paranoïa, il est indispensable de chiffrer un certain nombre d’informations personnelles qui intéressent les escrocs. Si relativement peu de personnes sont concernées par un espionnage étatique, nous sommes tous une cible potentielle pour les escrocs. Si ces escrocs n’utilisent pas eux même les informations qu’ils collectent, ils les distribuent sur un marché de revente d’information. Leurs moyens techniques sont sensiblement égaux aux moyens d’un état.
Malheureusement le chiffrement est difficile à utiliser. Il doit être suffisamment robuste, sans risquer de perdre les clés privées de chiffrement. En l’absence de ces clés les informations sont définitivement perdues pour tous. Seul un usage régulier permet d’avoir confiance dans les procédures de chiffrement / déchiffrement.
Ce billet va présenter des outils pour utiliser régulièrement un chiffrement openPGP de façon suffisamment simple et sécurisé. Ces outils vous permettrons de gérer essentiellement votre portefeuille de mots de passe.

Lire la suite

Éléments pour un vote électronique cryptographiquement vérifiable

12 Nov. 2016: ajout de la vérification des résultats

Maintenant que nous avons abordé le chiffrement asymétrique de ElGamal et ses propriétés, nous pouvons assembler ces différents éléments pour étudier un système de vote électronique qui serait cryptographiquement vérifiable.

Pour commencer il faut rappeler que le vote est destiné à collecter l’avis sincère des individus d’un groupe sur une décision spécifique. La sincérité de la collecte dépend aussi bien de la qualité de la question que de la constitution du/des groupe(s), du comptage des avis ou encore de l’absence de pression individuelle avant ou après le vote. À cet effet le vote classique avec des bulletins papiers utilise des procédures bien établies où la diffusion des bulletins, les isoloirs, les urnes transparentes … et au final les observateurs permettent de s’assurer de la sincérité de l’expression de chacun. Ces procédures imposent une unité de lieux et de temps.
Le vote électronique (depuis un ordinateur connecté à Internet) permet de s’affranchir des contraintes de déplacements, autorise une durée de vote plus longue et facilite le décompte des choix.
Pour des votes à forts enjeux cette contrainte de temps et de lieux est pourtant de nos jours symboliquement importante : se déplacer un jour particulier pour exprimer son choix démontre une volonté réelle de s’exprimer.
D’autre part, lorsque les déplacements sont difficiles ou impossibles, certains votes permettent l’envoi de bulletins par correspondance. Dans ce cas il n’est pas possible de s’assurer de l’identité réelle de la personne qui glisse son bulletin dans l’enveloppe ni qu’elle effectue son choix sans contrainte. De la même façon si une personne vote depuis son ordinateur il n’est pas possible de garantir qui est réellement derrière le clavier. Ce vote par correspondance est autorisé ou accepté par les parties lorsque ce risque est acceptable : l’effort pour organiser une fraude généralisée semble comme peu probable.

Si le vote électronique permet de s’affranchir des distances et permet une durée de vote plus longue, nous voyons déjà que ce type de vote ne résout pas les questions d’organisation du scrutin, de qualité des questions, de définition des groupes, de vote sans contrainte. Il faut également s’assurer que chaque individu ait accès à un ordinateur connecté et soit capable de s’en servir. Pour terminer, comme tout système informatique il peut y avoir des dysfonctionnements (bugs) qui ne sont pas ou difficilement observables même par des experts. L’objet de ce billet est alors de présenter des technologies qui permettent de s’assurer de l’absence de dysfonctionnement lors de la manipulation des bulletins en autorisant la vérification du vote sans lever l’anonymat des votants.

Tous les calculs présentés dans ce billet sont effectués à partir de formulaires traités sur la page que vous êtes en train de lire et donc par votre ordinateur. Il suffit de consulter le source de cette page pour avoir tous les codes nécessaires. Notez que le chiffrement est utile et même nécessaire à l’expression démocratique. Il suffit de savoir manipuler de grands nombres entiers pour effectuer un chiffrement efficace. Interdire ou limiter l’usage des technologies de chiffrement quelle qu’en soit la raison est donc totalement absurde. Ceux qui proposent ce type de solution sont soit totalement incompétents soit vraiment malhonnêtes.

Lire la suite

Propriétés du chiffrement ElGamal

Après avoir découvert les principes du chiffrement asymétrique ElGamal, nous allons aborder les propriétés remarquables de ce système de chiffrement. Ici aussi vous pourrez tester les algorithmes et vous faire une idée avec des valeurs suffisamment petites pour rester lisibles.

Les calculs sont toujours réalisés par votre navigateur. Vous pouvez afficher le code source de la page pour visualiser les codes javascript. Ceux-ci sont volontairement écrits de façon linéaire pour faire clairement apparaître les formules utilisées.

Comme certaines formules mathématiques sont relativement complexes, nous allons utiliser la bibliothèque BigInteger de Peter Olson pour manipuler de grands entiers. Cette bibliothèque peut gérer sans problème des nombres de 2048 bits ou 610 chiffres. Il s’agit de la taille recommandée de nos jours pour s’assurer de la robustesse du chiffrement.

Lire la suite

Introduction au chiffrement asymétrique ElGamal

Incrédulité de Saint Thomas (extrait), Le Caravage, 1603 Il existe un certain nombre de tutoriels pour utiliser des logiciels de chiffrement et un bon nombre de cours de maths sur le sujet, par contre, il y a assez peu de documentation sur les principes informatique mis en oeuvre pour faire du chiffrement. Cette série de billets va chercher à expliquer un certain nombre de notions en utilisant des exemples simples, si possible reproductibles avec une calculatrice. Plutôt que croire sur parole que ces technologies sont sûres, nous essayerons, comme ci-contre Saint Thomas, de les mettre en oeuvre pour nous faire notre propre idée.

Le chiffrement est un sujet d’actualité où l’on entend beaucoup de bêtises. Il faut déjà rappeler que le chiffrement est indispensable à tout le monde et est déjà largement répandu. Nous possédons tous des données qu’il faut protéger : nos codes d’accès et les données qui nous permettent de nous identifier, d’identifier des proches, les données concernant notre santé, nos revenus, nos moyens de payement, nos bulletins de vote, … Ces données doivent être protégés des escrocs qui sauraient les exploiter à leur avantage ou de nos erreurs de manipulation qui mettraient ces données à disposition d’escrocs.

Lire la suite

Authentification double facteur TOTP pour serveur ssh

Pour accéder à des ressources numériques il est nécessaire de s’authentifier. C’est la procédure qui permet de vérifier l’identité de la personne qui accède à la ressource. Jusqu’à nos jours, on utilise couramment un identifiant (ou login) associé à un mot de passe connu uniquement par la personne qui a accès à la ressource. On sait également que cette méthode n’est pas très sûre. Un mot de passe trop simple peut facilement être deviné. C’est pour cela qu’il est recommandé d’utiliser des mots de passe complexes et des mots de passes différents pour chaque ressource. Plus grave : on ne peut pas savoir si un mot de passe est copié. Pour se protéger du vol de mot de passe, la solution est d’ajouter à «ce que l’on sait» (le mot de passe) un deuxième facteur : «ce que l’on a»1.

Une première idée est d’utiliser des paramètres biologiques comme les empreintes digitales ou l’iris. Mais les empreintes digitales sont faciles à copier et même à reproduire. Naturellement il ne sera pas possible de changer ses empreintes digitales lorsque le vol sera constaté. La «biométrie» est par conséquence une très mauvaise idée.

Une seconde solution est d’utiliser un carte à puce. Malheureusement il n’existe pas de façon standard de lire une carte à puce et la perte de l’objet va provoquer des frais importants.2

La solution la plus pratique est alors d’utiliser un code à usage unique: un «One Time Password». Un code doit être ajouté après l’identifiant et mot de passe. S’il est enregistré, vu, copié, il ne pourra de toute façon plus jamais être utilisé. En cas de perte, il suffit de révoquer l’ensemble des codes prévus : inutile de couper des mains ou crever des yeux.
Plusieurs solutions existent pour avoir accès à un code à usage unique. Il existe par exemple des équipements électroniques dédiés : des «token». Cependant ils peuvent être égarés et leur remplacement entrainera des frais. Une solution simple est la grille imprimée sur papier. Celle-ci peut également être égarée ou pire photocopiée.
La meilleur solution est alors l’usage d’un smartphone. Cela permet en plus de générer un code utilisable pendant 30 secondes : un «Time OTP». Il suffit que le smartphone et le serveur soient synchronisés à quelques secondes près. Ceci est devenu un standard pour les équipements connectés sur Internet.

Ce premier billet sur le sujet va nous permettre d’installer une authentification TOTP sur un serveur openssh.

Lire la suite

Android : contribuer au code en ligne de commande, application à Mirakel

android-vim.png Nous allons voir dans ce billet qu’il est facile de contribuer à du code pour des applications pour téléphone mobile sous système Android.

Android est un système d’exploitation basé sur un noyau Linux. Il a été créé par Google pour les téléphones et appareils mobiles. Si le système Android n’est pas totalement libre - certaines parties ne sont pas diffusées par Google, il l’est suffisamment pour avoir vu naître des distributions libres qui en assure la pérennité. Il existe actuellement un grand nombre d’applications libres pour Android.
L’intérêt des logiciels libres est d’avoir accès au code source des applications, on peut ainsi étudier la “recette de cuisine”, la modifier ou mieux encore corriger les éventuels problèmes.

Je ne vais pas ici vous apprendre à développer pour Android. En effet vous trouverez rapidement un grand nombre de documentation et de tutoriels en ligne. Cependant, de façon générale, l’écriture de l’application est réalisée avec environnement de développement intégré (IDE) Eclipse puis l’application est distribué dans le Play Store de Google. Nous allons voir dans ce billet que l’on peut très bien se passer d’Eclipse et du Play Store.

Lire la suite

utf8 sous linux et vim

utf8
Voici un tutoriel simple pour utiliser des caractères ou des symboles UTF8 à partir d’une machine GNU/Linux.

Depuis quelques années, l’usage de caractères spéciaux ne pose plus de grand problème sous Linux, cependant comme ces caractères n’apparaissent pas sur les claviers on a tendances à les oublier.

Après une rapide définition de ces caractères, je vous montrerai comment les utiliser facilement dans la plupart des applications et en particulier dans l’éditeur à tout faire : “vim“.

Lire la suite

Une histoire des principaux systèmes d'exploitation

ImprimanteSur le billet précédent où je décrivais les principes généraux de fonctionnement des ordinateurs, je m’étais arrêté au lancement du système d’exploitation.
Si en général dans l’histoire de l’informatique on se contente de décrire l’évolution des capacités physique des ordinateurs, nous verrons dans ce billet l’influence des choix effectués lors de la conception des systèmes d’exploitation sur les limites et capacités des principaux systèmes d’exploitation actuels.

Dans ce billet après avoir décrit rapidement l’essence du système d’exploitation nous verrons au travers de l’histoire de la création des principaux systèmes comment les choix stratégiques effectués au cours du temps influent encore sur les capacités et limites actuelles de ces systèmes.
 

Comme son nom l’indique, le système d’exploitation “exploite” les ressources de la machine. Nous avons vu que ces ressources se composent principalement du microprocesseur, de la mémoire (RAM) et du stockage.

Lire la suite

L'ordinateur expliqué aux enfants

…, aux grands parents et aux personnes effrayées par la technologie.

microprocesseurCe nouveau billet aurait logiquement dû précéder l’article destiné à expliquer Internet. En fait je ne pensais pas aborder ce sujet parce que l’on trouve déjà beaucoup de très bonnes documentations en ligne, en particulier sur Wikipedia. Mais suite aux premiers commentaires du précédent billet, je me suis décidé à écrire cet article en essayant de conserver les mêmes objectifs : faire apparaître uniquement les idées générales et les informations nécessaires à la compréhension des problèmes techniques les plus courants.

J’ai déjà abordé la notation binaire dans le billet précédent. Je vais me contenter d’un rapide rappel: l’ordinateur est stupide et ne sais manipuler que de petits interrupteurs. L’interrupteur est ouvert : le courant ne passe pas : on a la valeur ‘zéro’. L’interrupteur est fermé : le courant passe : on a la valeur ‘un’. On associe ces ‘0’ et ‘1’ par groupe de 4. Cette astuce permet d’utiliser une écriture hexadécimale (0 à 9 plus A,B,C,D,E,F) ainsi ‘2’ en décimal devient ‘2’ en hexadécimal et ‘0010’ en binaire. ‘10’ en décimal devient ‘A’ en hexadécimal et ‘1010’ en binaire. ‘15’ en décimal devient ‘F’ en hexadécimal et ‘1111’ en binaire. En pratique on utilise plutôt des groupes de 8 chiffres binaires (les octets), ou deux chiffres hexadécimaux.

Lire la suite