Categories
Cryptography

Une histoire d’arithmétique modulaire

Bob était amoureux d’Alice. Il voulait lui envoyer une déclaration d’amour. Mais Bob avait peur que cette déclaration puisse tomber dans les mains d’une autre personne. Par exemple le méchant Oscar. Par chance Alice qui aimait bien les maths connaissait RSA. Elle disposait tout naturellement d’une clé publique (b, n) et d’une clé privé (a, n).
Bob utilisa donc la clé publique d’Alice pour protéger son message:
        secret = message˄b mod n
Une fois le message réceptionné par Alice (IP par transporteurs aviaires), elle utilisa la clé privée afin de découvrir le message:
        message = secret˄a mod n

Mais comment a fait Alice pour avoir de telles clés?

Une des premières choses à faire était de trouver (à la main et avec le test de primalité de Miller-Rabin) deux très grands nombres premiers p et q tels que:

        (1)   Φ(n) = (p - 1) * (q - 1), l’indicateur d’Euler
        (2)   n = p * q

n, le modulus, est donc le produit de deux grands nombres premiers.

Nous avons également:
        (3)   a = b˄-1 mod Φ(n)
(Si tu veux comprendre un peu plus en détail: 1 et 2. Et si vraiment Euler ne te dis plus rien, tu peux aussi réviser ton arithmétique modulaire de terminale. Le bon vieux temps.)

Ensuite nous devons trouver un entier b tel que:
        pgcd(b, Φ) = 1
Et finalement l’exposant privé a sera l’inverse de b mod Φ. (Pareil, revoir les cours de terminale. Désolé.)

Mais au bout de tout ça, quelles données sont utiles à Alice ? Et bien uniquement l’exposant public b, l’exposant privé a et le modulus n. C’est tout. p et q ne sont plus utiles puisque nous connaissons n.
De même pour Φ, il ne faut pas le garder car il permet de retrouver p et q. (J’aimais bien faire ça, en seconde…)

Bref attaquer RSA n’est pas plus facile que de factoriser le modulus.

Si Oscar avait connu p et q il aurait facilement pu calculer Φ (avec 1). Puis l’exposant privé a (avec 3) qui est donc l’inverse modulaire de b et Φ. Un cauchemar pour Bob. Une chance pour les victimes de WannaCry.

Categories
Cryptography Security

Yubikey Neo

Ça fait quelque temps maintenant que je teste la Yubikey Neo. Mon objectif était de renforcer l’authentification à certains services Web. J’utilise également cette clé pour déverrouiller mon téléphone lorsque je ne suis pas chez moi, raison pour laquelle j’ai opté pour la Neo qui peut dialoguer via NFC.

Actuellement les services Web me permettant d’utiliser cette clé sont Google, GitLab, GitHub et Bitbucket. Aussi possible avec WorPress via une extension. C’est déjà pas mal, mais insuffisant.

Par la même occasion, j’ai décidé d’améliorer ma gestion des mots de passe. J’utilise maintenant le logiciel pass. Mes navigateurs ne contiennent pratiquement plus de mots de passe. Ce logiciel utilise GPG pour chiffrer vos mots de passe. Du coup, il peut être très intéressant de déplacer votre clé privé sur votre Yubikey. Les mots de passe gérés par pass peuvent aussi se trouver dans un dépôt Git, ce qui est pratique si vous acceptez de stocker ce genre d’information sur des serveurs.

Voilà, pour l’instant je suis fan de Yubikey.

Categories
Cryptography Security

Gérer son identité avec Namecoin

Comment gérer son identité en ligne ? Une question récurrente, y compris sur ce blog. Évidemment, nous avons besoin de cryptographie. Dans un billet précédent j’avais présenté le service Keybase (mon profil, accès sans Tor) qui est génial pour un tas de raisons. Par exemple, ceci permet de prouver mon identité sur le réseau GitHub:

$ keybase id cedricbonhomme@github
▶ INFO Identifying cedricbonhomme
✔ public key fingerprint: 55F5 D60E EFCA 3591 0089 18E7 A1CB 94DE 57B7 A70D
฿ bitcoin 1GVmhR9fbBeEh7rP1qNq76jWArDdDQ3otZ
✔ "cedricbonhomme" on hackernews: https://news.ycombinator.com/user?id=cedricbonhomme [cached 2016-04-03 10:13:45 CEST]
✔ admin of www.cedricbonhomme.org via HTTP: http://www.cedricbonhomme.org/keybase.txt [cached 2016-04-03 10:13:45 CEST]"cedricbonhomme" on github: https://gist.github.com/e8cba56e5b85517c6758 [cached 2016-04-03 10:13:45 CEST]

La preuve, générée avec ma clé privée, est donc ici. Le défaut est que nous dépendons d’un service et qu’une connexion Internet est nécessaire.

Une autre possibilité est d’utiliser Namecoin. Namecoin est une base de données clés-valeurs distribuée basée sur Block chain et utilisant les preuves de travail. Il est donc possible de stocker des informations dans cette base de données (ce qui permet par exemple d’avoir une alternative au DNS).

Pour ça, il va falloir payer avec des Namecoins. Soit directement en achetant des Namecoins, soit en minant (je ne pense pas qu’aujourd’hui ce soit encore facilement possible) ou en échangeant des Bitcoins. J’ai choisi d’échanger quelques Bitcoins (on peut voir la transaction ici). J’ai ensuite pu demander l’enregistrement du nouveau champ cedric dans l’espace de noms id. Une fois que cette transaction sera confirmée (quelques heures d’attente), j’ai pu mettre à jour ce nom avec des informations au format JSON (ce format n’est pas obligatoire).

$ namecoind name_filter id/cedric
[
{
"name" : "id/cedric",
"value" : "{\"name\":\"Cedric Bonhomme\",\"email\": \"cedric+namecoin@cedricbonhomme.org\", \"weblog\":\"https://www.cedricbonhomme.org\",\"GitHub\":\"https://github.com/cedricbonhomme\",\"photo_url\":\"https://www.cedricbonhomme.org/cedricbonhomme.png\",\"gpg\":\"55F5 D60E EFCA 3591 0089 18E7 A1CB 94DE 57B7 A70D\"}",
"expires_in" : 35997
}
]

Pourquoi ce format ? Car il existe un site Web qui index l’espace de noms /id: OneID (Génial !). Ce qui permet d’avoir une petite interface Web pour consulter ces informations et évite d’utiliser la commande name_filter de Namecoin.

Categories
Cryptography

«Le chiffrement est utilisé par les terroristes»

Les terroristes communiquent via des canaux chiffrés, nous dit-on. D’ailleurs le chiffrement «Double ROT-13» a été utilisé pour l’attentat du 13 Novembre 2015 à Paris. Il faut donc interdire ce chiffrement. Tout comme les voitures.

Categories
Security

TextSecure

TextSecure a complètement remplacé, sur mon smartphone, l’application SMS par défaut. L’application marie très bien sécurité et utilisabilité. Bortzmeyer en parle déjà très bien.

Categories
Cryptography Security

Bitmessage

Bitmessage est un système de messagerie publié en novembre 2012 et dont la popularité vient de faire un petit bon suite à l’affaire PRISM. Le système est décentralisé et fonctionne sans autorité de confiance. Une implémentation expérimentale Python est disponible.

Son fonctionnement est assez intéressant, il est possible de voir des analogies avec Bitcoin. Par exemple vos adresses de messagerie (environ 36 caractères) sont générées à partir de votre clé ou d’une passphrase. Vous pouvez donc générer une nouvelle adresse dès que vous le souhaitez au dépend de la réputation, sauf si vous signez vos messages avec votre clé GPG.

De plus Bitmessage cache les méta-données comme l’adresse de l’expéditeur et du destinataire.

Lorsque vous envoyez un message à une personne tous les noeuds du réseau reçoivent le message mais seul le destinataire sera capable de le lire. Il est possible d’envoyer un message à une ou plusieurs personnes. Il est même possible d’envoyer un message broadcast à toutes les personnes abonnées à votre adresse.

Tout comme avec Bitcoin, tout le monde peut voir qui envoie un message à qui. Ceci n’est pas un problème car vous pouvez changer d’adresse e-mail à chaque nouvel envoie. Et sauf si vous le faites de manière explicite, il n’est pas possible d’établir un lien entre deux adresses.

Le projet est très peu documenté mais l’installation sur les différentes plate-formes est vraiment simple. L’utilisation pour une personne initiée aux techniques de cryptographies et de communications pair-à-pair est assez simple mais peu déstabiliser les novices. Un tutoriel avec des images est disponible ici. Vous constaterez que l’interface est déjà plutôt bien faite.

Une intégration dans la suite Kontact sera vraiment la bienvenue!

Mon adresse Bitmessage de prise de contact est: BM-2D91oZfKyoq7NYy5cFrf2YtCcfirmQvjLe

Categories
Cryptography

Stanford crypto class

Je l’avais annoncé ici, le cours débutera le 12 Mars.

Categories
Cryptography

Cours de cryptographie de l’université de Stanford

Attention ça ne déconne plus, des cours de Stanford gratis. Mais vous n’aurez pas de certification. Que pour le plaisir 😉

Il y a maintenant une date plus précise. Les cours commenceront le 23 janvier 2012, en ce qui concerne la cryptographie. C’est l’occasion de tester ses connaissances. Ou même d’apprendre car le cours devrait être autosuffisant.

Categories
Cryptography Security

Stanford crypto class

J’ai complètement oublié d’en parler ici.

Categories
Cryptography Python Security

Pure Python RSA implementation compatible OpenSSL

$ sudo aptitude install python-pyasn1
$ hg clone https://bitbucket.org/sybren/python-rsa/
$ cd python-rsa
$ sudo python setup.py install
$ cd ..

# Generation of a private key:
$ openssl genrsa -out myprivatekey.pem 512


# To get a Python-RSA-compatible public key from OpenSSL:
$ pyrsa-priv2pub -i myprivatekey.pem -o mypublickey.pem

# Get a public key with the standard method:
$ openssl rsa -in myprivatekey.pem -out public.pem -outform PEM -pubout
writing RSA key


# Test 1: Python-RSA-compatible public key
$ echo hello there > testfile.txt
$ pyrsa-encrypt -i testfile.txt -o testfile.rsa mypublickey.pem
Reading public key from mypublickey.pem
Reading input from testfile.txt
Encrypting
Writing output to testfile.rsa
$ openssl rsautl -in testfile.rsa -inkey myprivatekey.pem -decrypt
hello there


# Test 2: standard public key
$ openssl rsautl -encrypt -inkey public.pem -pubin -in testfile.txt -out file.ssl
$ pyrsa-decrypt -i file.ssl -o file.txt myprivatekey.pem 
Reading private key from myprivatekey.pem
Reading input from file.ssl
Decrypting
Writing output to file.txt
$ cat file.txt 
hello there

C’est le module Python RSA que j’utilise en général.