diff --git a/content/slides/index.html b/content/slides/index.html index 31381b26e22dceaeb284adf63c1b93a7083415d3..208bb81496d6e8a565769d64a39c4c0c140253dc 100644 --- a/content/slides/index.html +++ b/content/slides/index.html @@ -5,6 +5,6 @@ <li><a href="privacy/tor.html">tor</a></li> <li><a href="privacy/tails.html">tails</a></li> <li><a href="privacy/crypto.html">crypto</a>ok</li> -<li><a href="privacy/ssl.html">ssl</a></li> -<li><a href="privacy/pgp.html">pgp</a></li> +<li><a href="privacy/ssl.html">ssl</a>ok</li> +<li><a href="privacy/pgp.html">pgp</a>ok</li> <li><a href="privacy/bitcoin.html">bitcoin</a></li> diff --git a/content/slides/privacy/images/gpg/keybase1.png b/content/slides/privacy/images/gpg/keybase1.png new file mode 100644 index 0000000000000000000000000000000000000000..626a603f4a7223aba2f15ead0202a26db641a717 Binary files /dev/null and b/content/slides/privacy/images/gpg/keybase1.png differ diff --git a/content/slides/privacy/images/gpg/keybase2.png b/content/slides/privacy/images/gpg/keybase2.png new file mode 100644 index 0000000000000000000000000000000000000000..161fcd54e82e74b26f6af03f0d666e386f1f1081 Binary files /dev/null and b/content/slides/privacy/images/gpg/keybase2.png differ diff --git a/content/slides/privacy/images/gpg/keybase3.png b/content/slides/privacy/images/gpg/keybase3.png new file mode 100644 index 0000000000000000000000000000000000000000..1385f53c0a33c47a9e5210d4f62c3880cd6e549a Binary files /dev/null and b/content/slides/privacy/images/gpg/keybase3.png differ diff --git a/content/slides/privacy/md/pgp.md b/content/slides/privacy/md/pgp.md index 263a196cf9bc860508fc64e8dba883f93cb7f6d4..371c3a8df2cc675b89058801ed92c05b6af029a5 100644 --- a/content/slides/privacy/md/pgp.md +++ b/content/slides/privacy/md/pgp.md @@ -2,54 +2,711 @@ # <i class="fa fa-user-secret" aria-hidden="true"></i> + ## PGP +* Chiffrement asymétrique * Phil Zimmermann -* munition / cryptowar -* PGP implémentation foireuse -* GPG GnuPG impléentation GPL -* asymétrique + * 1991 + * munition / cryptowar +* PGP abandonné +* GPG GnuPG sous GPL devient est le standard + + +# Gérer son envrionnement GPG + + +## gpgenv + +* Simplifie la gestion des clés en créant des environnements temporaires + * Permet de repartir de 0 simplement + +<pre><code class="hljs bash" style="font-size: 30px">$ wget http://m4z3.me/gpgenv -O /tmp/gpgenv +$ source /tmp/gpgenv +gpg --help +</code></pre> + + +## gpgenv + +```bash +$ gpgenv create +new GNUPGHOME=/tmp/gnupg-Lw4Ck +``` + +* Crée un environnement (env) vierge localisé dans /tmp/gnupg-Lw4Ck. + +```bash +$ gpgenv cd +``` + +* permet de se positionner dans le nouveau répertoire + + +#### gpgenv + +```bash +$ gpgenv backup ~/Bureau/batman.tgz +``` + +* permet de sauvegarder son env dans un archive + +```bash +$ gpgenv restore ~/Bureau/batman.tgz +Restored backup in /tmp/gnupg-ZuXYw +To activate it, use + gpgenv use /tmp/gnupg-ZuXYw +``` + +* permet de restaurer un env à partir d'une archive + +```bash +$ gpgenv use /tmp/gnupg-ZuXYw && gpgenv cd +``` + +* permet d'utiliser l'env restauré et de se positionner dans le répertoire associé + + +# Gérer ses clés GPG + ## Création d’une clé PGP -% gpg --gen-key -▶ Créé la paire de clés de l’utilisateur -▶ Créé un « certificat » avec la clé publique et l’identité de l’utilisateur (clé publique) -▶ Signe la clé publique avec la clé privée -* C’est grosso-modo un certificat X.509 auto-signé -## Signature d’une clé PGP -Une clé PGP peut avoir +* Création de la paire de clés de l’utilisateur + * un « certificat » avec + * la clé publique + * signée avec la clé privée + * identité de l’utilisateur + + +### Création d’une clé PGP maître + +```bash +$ gpg --full-gen-key # or --gen-key +gpg (GnuPG) 2.1.11; Copyright (C) 2016 Free Software Foundation, Inc. +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +Sélectionnez le type de clés désiré : + (1) RSA et RSA (par défaut) + (2) DSA et Elgamal + (3) DSA (signature seule) + (4) RSA (signature seule) +Quel est votre choix ? 1 +``` + + +### Création d’une clé PGP maître + +* Choisir une taille de clé maximale +* Choisir une durée de vie infinie + * elle doit être valide pour être utilisée + * plus la durée de vie est nogue + * plus on récolte de signature +* Saisir son identité +* Choisir un mot de passe fort + + +### Lister les clés + +```bash +$ gpg --list-keys +pub rsa4096/3E5AC6A0 2018-01-09 [SC] +uid [ ultime ] Batman (clés à usage professionnel) <batman@batcave.com> +sub rsa4096/31C5E7B9 2018-01-09 [E] +sub rsa4096/DD6A21D4 2018-01-09 [S] + +``` + +* liste toutes les clés de l'environnement +<small> +* 3E5AC6A0, batman@batcave.com sont 2 ids de la clé public +* 31C5E7B9 et DD6A21D4 sont les ids de la clé de chiffrement et de signature +</small> + +```bash +$ gpg --list-private-keys +``` + +* liste toutes les clés privées de l'environnement + * dont on a le mot de passe + + +### Exporter une clé GPG + +```bash +$ gpg --export --armor batman@batcave.com > batman.pub.asc +$ gpg --export --armor 3E5AC6A0 > batman.pub.asc +$ gpg --export --armor DD6A21D4 > batman.pub.asc +``` +* exportent le même certificat (celui de la clé maître) +* ASCII-armor encrypted or signed output + +```bash +gpg --export-secret-keys --armor \ + batman@batcave.com > batman.asc +``` + +* exporte la clé privée + * le mot de passe est nécessaire + + +### Importer une clé + +```bash +$ gpg --import batman.asc +``` + +* s'il s'agit d'une clé privée + * le mot de passe sera demandé + * les fonctionnalités de la clé seront ensuite utilisables + +```bash +$ gpg --import robin.pub.asc +``` + +* s'il s'agit d'un certificat + * aucun mot de passe ne sera demandé + * la clé pourra être utilisée pour chiffrer à destination du détenteur de la clé + + +#### Editer une clé / Durcir le hashage + +```bash +$ gpg --edit-key batman@batcave.com +$ gpg> setpref SHA512 SHA384 SHA256 SHA224 \ + AES256 AES192 AES CAST5 ZLIB BZIP2 \ + ZIP Uncompressed +$ gpg> save +``` +* il faut bien sauvegarder avant de quitter le mode édition + + +#### Editer une clé clé maître / Ajouter une identité + +```bash +$ gpg --edit-key batman@batcave.com +$ gpg> adduid +Nom réel : Bruce Wayne +Adresse électronique : bruce.wayne@gmail.com +Commentaire : clé à usage personnel +Vous utilisez le jeu de caractères « utf-8 ». +Vous avez sélectionné cette identité : + « Bruce Wayne (clé à usage personnel) <bruce.wayne@gmail.com> » + +Changer le (N)om, le (C)ommentaire, l\'(A)dresse électronique +ou (O)ui/(Q)uitter ? O +$ gpg> save +``` + +* Toutes les identités sont liées dans le certificat + * pour utiliser GPG en tant que Bruce Wayne il faudra générer une autre clé maître + + +#### Editer une clé clé maître / Ajouter une photo + +```bash +$ gpg --edit-key batman@batcave.com +$ gpg> addphoto +$ gpg> save +``` + +* l'image doit être petite pour garder une taille de clé raisonnable + * 240x288 is a good size to use + + +## Sous clé + +* Permet de conserver sa clé maître déconnectée + * Mais de pouvoir utiliser la foncationnalités de la sous clé + * idéal pour gérer une clé par appareil (mobile, laptop, fix, ...) + +* quel est l'intérêt d'une sous clé de chiffrement? +* quel est l'intérêt d'une sous clé de signature? + + +#### Editer une clé / Ajouter une sous clé + +```bash +$ gpg --edit-key batman@batcave.com +$ gpg> addkey +Sélectionnez le type de clés désiré : + (3) DSA (signature seule) + (4) RSA (signature seule) + (5) Elgamal (chiffrement seul) + (6) RSA (chiffrement seul) +Quel est votre choix ? 4 +``` + +* choisir la fonctionnalité +* choisir une durée de vie +* choisir un nouveau mot de passe fort + +```bash +$ gpg> save +``` + + +#### Voir la nouvelle sous clé + +```bash +$ gpg --list-secret-keys +/tmp/gnupg-RL2R8/pubring.kbx +---------------------------- +sec rsa4096/3E5AC6A0 2018-01-09 [SC] +uid [ inconnu ???] Batman (clés à usage professionnel) <batman@batcave.com> +ssb rsa4096/31C5E7B9 2018-01-09 [E] +ssb rsa4096/DD6A21D4 2018-01-09 [S] +``` + + +#### Exporter une sous clé + +L'enjeu est de rendre la clé maître inutilisable + +```bash +$ gpg --export-secret-subkeys --armor DD6A21D4 batman@batcave.com > batman@batcave.com.mobile.private.subkey +``` +* l'id de la sous clé doit être précisé sans quoi toutes les sous clés sont exportées +* --armor ne fonctionne pas + +Autre stratégie + +```bash +gpg --delete-secret-key batman@batcave.com +gpg --export-secret-keys --armor batman@batcave.com > batman.mobile.asc +``` + +* ici --armor fonctionne + + +#### Voir la nouvelle sous clé "nettoyée" + +```bash +$ gpg --list-secret-keys +/tmp/gnupg-RL2R8/pubring.kbx +---------------------------- +sec# rsa4096/3E5AC6A0 2018-01-09 [SC] +uid [ inconnue ???] Batman (clés à usage professionnel) <batman@batcave.com> +ssb rsa4096/31C5E7B9 2018-01-09 [E] +ssb rsa4096/DD6A21D4 2018-01-09 [S] +``` + +* '#' signifie que la clé maître est inutilisable \o/ + * --edit-key refusera de sauver les opérations + + +## Publication d'un certificat + +Partout + +* sur une page web +* sur une carte de visite +* en pièce jointe ou dans le corps d'un message + + +### Serveurs de clé PGP + +* existent depuis que gpg existe +* [http://pgp.mit.edu/](http://pgp.mit.edu/) est un des plus populaires + * informations synchrones entre tous les Serveurs + * suppression quasi impossible + * beaucoup de clés obsolètes (non révoquées et non maîtrisées) + * n'importe qui peut publier des clés publiques pour n'importe quelle identité + * aucune vérification + + +### Serveur de clé 2nd génération + +* [PGP Global Directory](https://keyserver.pgp.com/vkd/GetWelcomeScreen.event) + * vérification de la maîtrise du (des) mail(s) associé(s) au certificats à la création + * confirmation d'existence de la clé envoyée au(x) mail(s) associé(s) au certificats à intervalles réguliers +* non synchronisés avec les serveurs 1<sup>ère</sup> génération + + +### Keybase.io + +* [Keybase.io](https://keybase.io) + * récent + * basé sur PGP + * 2 parties + * publication de la clé publique + * confirmation via différents réseaux sociaux + * correspondance / partage chiffré + * nécessite l'import de la clé privée :/ + + +### Keybase.io ... the right way + + + +Une autre fois peut être ;) + + +### Keybase.io ... the right way + + + + +### Keybase.io ... the right way + + + +Hardocre mode \o/ + +#### et une sous clé dédiée? + + +## une clé PGP sur une carte de visite? + +* [asc2qr](https://github.com/4bitfocus/asc-key-to-qr-code) + * ne marche pas + +* [Putting my pgp idl ink on printed business cards](https://security.stackexchange.com/questions/70501/putting-my-pgp-id-link-on-printed-business-cards) + * [qrencode](ht1tps://doc.ubuntu-fr.org/qrcode) + * just do it! -plusieurs signatures -▶ Alice fourni à Bob l’empreinte de sa clé publique -▶ Bob vérifie que l’empreinte correspond -▶ Bob signe la clé publique avec sa clé privée -▶ Bob envoie à Alice sa clé publique signée -▶ Alice importe sa clé dans son trousseau -▶ La clé existe déjà , seule la nouvelle signature est ajoutée +## Révocation + +* secret ou clé perdus +* secret ou clé compromises + * l'attaquant peut + * écrire en se faisant passer pour le propriétaire des clés + * signer en général + * lire tout message (passé et avenir) chiffré avec la clé publique + + +## Révocation + +* révoquer la clé en question + * distribuer la clé révoquée à tout ceux qui l'utilisent + * appelé aussi certificat de révocation + + +## Révocation de la clé maître + +* Il faut anticiper + * créer le certificat de révocation dés la création de la clé + +<pre><code class="hljs DD6A21D4" style="font-size: 15px">$ gpg --output batman.revoke.asc --gen-revoke batman@batcave.com + +sec 4096R/0DCD0D14 2017-09-04 Batman (clés à usage professionnel) <batman@batcave.com> + +Faut-il créer un certificat de révocation pour cette clés ? (o/N) o +choisissez la cause de la révocation : + 0 = Aucune raison indiquée + 1 = La clés a été compromise + 2 = La clés a été remplacée + 3 = La clés n'est plus utilisée + Q = Annuler +</code></pre> + + +## Révocation d'une sous clé + +* créer un certificat de révocation + * à tout moment avec la clé maître + +<pre><code class="hljs bash" style="font-size: 18px">$ gpg --output batman.mobile.revoke.asc --gen-revoke batman@batcave.com</code></pre> + + +## Publication du certificat de révocation + +<pre><code class="hljs bash" style="font-size: 18px">$ gpg --import batman.mobile.revoke.asc # ou batman.revoke.asc +$ gpg --keyserver pgp.mit.edu --send-keys 6382285E</code></pre> + +* En cas de perte ou de compromission uniquement + * sinon la clé est invalidée +* la clé de révocation est à garder en lieu sûr + * mais à un autre endroit que la clé maître + + +# Utiliser ses clés GPG + + +#### Chiffrer + +```bash +$ gpg --encrypt --armor --output msg.gpg \ + --recipient robin@batcave.com msg +``` + +* La clé (publique) robin@batcave.com doit faire partie du trousseau + * importation au préalable + * --recipient permet de spécifier la clé publique à utiliser + +<br> + +#### Déchiffrer + +```bash +$ gpg --decrypt msg.gpg +``` + +* Effectué avec la clé privée robin@batcave.com + * nécessite le mot de passe de cette clé privée + + +## Signer + +* La signature + * certifie un document à date + * utilise la clé privée de l'émetteur + * non répudiation + +```bash +$ gpg --output doc.sig --sign doc +$ gpg --output doc --decrypt doc.sig +gpg: Signature made Fri Jun 4 12:02:38 1999 CDT using DSA key ID BB7576AC +gpg: Good signature from "Alice (Judge) <alice@cyb.org>" +``` + +* doc.sig contient le document compressé (format binaire) et signé + * pas pratique pour une ISO par exemple + + +## Signature en claire + +```bash +$ gpg --clearsign doc +``` + +Evite la compression +* document suivi d'une signature ASCII +* --local-user permet de spécifier la clé privée à utiliser + + +## Signature en claire + +```bash +gpg --output doc.sig --detach-sig doc +``` + +produit la signature du fichier sans le fichier + +```bash +gpg --verify doc.sig doc +``` + +le fichier et la signature sont nécessaires pour vérifier l'intégrité et l'authentification + + +# Gérer son réseau de confiance + + +### Configurer un serveur de clef + +Dans .gnupg/gpg.conf + +```bash +keyserver pool.sks-keyservers.net +``` + +Ou directement dans la ligne de commande + +<pre><code class="hljs bash" style="font-size: 18px">$ gpg --keyserver pgp.mit.edu --search-keys pascal.lafourcade@udamail.fr</code></pre> + + +### Garder son trousseau à jour + +```bash +$ gpg --refresh-keys +``` + +Automatisable via cron + +```bash +# mettre à jour mes clefs OpenPGP à chaque jour, à midi +0 12 * * * /usr/bin/gpg --refresh-keys > /dev/null 2>&1 +``` + + +### Importer un clé à partir d'un serveur de clé public (manuellement i.e. sans enigmail) + + +## Réseau de confiance + +* Les signatures sont publiques + * on sait qui (quelle clé) a signé la clé de qui + * soit qui fait confiance à qui (à quelle clé) + * 5.5 est le nombre de noeuds moyen entre 2 utilisateurs de PGP + * une signature n'est pas symétrique + +[sig2dot GPG/PGP Keyring Graph Generator](http://www.chaosreigns.com/code/sig2dot/) -Bob peut aussi publier la clé d’Alice sur Internet... mais c’est mal vu -* et surtout c'est probablement déjà fait ## Réseau de confiance -Les signatures sont publiques : -* on sait qui à signé la clé de qui (donc qui fait confiance à qui) -« Les amis de mes amis sont mes amis » -[schéma slide 51] -On est en moyenne à 5.5 clés d’un autre utilisateur de PGP -* signature pas forcément symétrique -## difficulté du poartage web of Trust +Avant de signer une clé il faut vérifier qu'elle appartient bien à une personne physique +* il faut + * échanger la clé ou l'empreinte de la clé physiquement + * faut vérifier les papiers d'identité de la personne + + +## Fingerprint + +*Empreinte de clé* + +* 2 clés avec le même fingerprint sont identiques +* similarité vérifiable par un humain + * permet de vérifier une clé publique + +```bash +$ gpg --fingerprint robin@batcave.com +``` + +ou + +<pre><code class="hljs bash" style="font-size: 18px">$ gpg --edit-key robin@batcave.com +gpg> fpr +pub 1024D/9E98BC16 1999-06-04 Blake (Executioner) <blake@cyb.org> + Fingerprint: 268F 448F CCD7 AF34 183E 52D8 9BDE 1A08 9E98 BC16 +</code></pre> + + +## Signature d’une clé + +Une clé PGP peut avoir plusieurs signatures +* Alice fourni à Bob l’empreinte de sa clé publique +* Bob vérifie que l’empreinte correspond +* Bob signe la clé publique avec sa clé privée +* Bob envoie à Alice clé publique d'Alice signée +* Alice importe sa clé dans son trousseau + * La clé existe déjà , seule la nouvelle signature est ajoutée + +http://openpgp.vie-privee.org/gpg-intro-5.html + + +## Signer une clé publique + +```bash +$ gpg --edit-key robin@batcave.com +gpg> sign +``` + +ou + +```bash +$ gpg --sign-key robin@batcave.com +``` + +* en cas d'UIDs multiples on peut + * signer tous les UIDs + * ou choisir celles que l'on souhaite signer +* **lsign** permet de signer localement (non exportable) + + +## Propager la signature + +* La clé un fois signée doit être renvoyée à son propriétaire +* Il est également possible de la publier directement sur un serveur de clé première génération + * le propriétaire n'est alors plus maître des signatures de sa clé + * ce n'est pas une bonne pratique + + +#### Lister les signatures + +```bash +$ gpg --list-sigs robin@batcave.com +pub 1024D/CE63A2E7 2000-02-23 Benoit <benoit@parinux.org> +sig 5ED61FDA 2000-06-06 [User id not found] +sig CE63A2E7 2000-02-23 Benoit <benoit@parinux.org> +sig B4C5FE7F 2001-07-18 [User id not found] +sub 2048g/B5A97C83 2000-02-23 +sig CE63A2E7 2000-02-23 Benoit <benoit@parinux.org> +``` + +ou + +```bash +$ gpg --list-sigs robin@batcave.com +gpg> sigs +``` + +* Sans id de clé ```gpg --list-sigs``` liste toutes les clés avec toutes leurs signatures +* Les clés non importées dans le trousseau apparaissent en **[User id not found]** + + +#### Vérifier les signatures + +```bash +$ gpg --check-sigs robin@batcave.com +pub 1024D/CE63A2E7 2000-02-23 Benoit <benoit@parinux.org> +sig? 5ED61FDA 2000-06-06 +sig! CE63A2E7 2000-02-23 Benoit <benoit@parinux.org> +sig! B4C5FE7F 2001-07-18 Olivier Berger <oberger@april.org> +sub 2048g/B5A97C83 2000-02-23 +sig! CE63A2E7 2000-02-23 Benoit <benoit@parinux.org> +``` + +ou + +```bash +$ gpg --list-sigs robin@batcave.com +gpg> check +``` +* Sans id de clé ```gpg --check-sigs``` vérifie toutes les clés avec toutes leurs signatures +* **?** non importées dans le trousseau +* **!** clés publiques du trousseau + + +## Récupérer automatiquement les clés dans le trousseau + +<pre><code class="hljs bash" style="font-size: 20px">#!/bin/sh +echo "" +echo "Mise à jour des clés GnuPG :" +echo "" +for i in $(/usr/bin/gpg --list-keys | grep '^pub' | cut -c 12-19); \ + do /usr/bin/gpg --keyserver pgp.mit.edu --recv-key $i; done +</code></pre> + + +#### [Utiliser la confiance pour valider les clés](https://www.gnupg.org/gph/en/manual/x334.html) + +```bash$ +gpg --list-sigs robin@batcave.com +gpg> trust +``` + +1. Don't know (unknown default trust level) +2. I do NOT trust (none) +3. I trust marginally (marginal) +4. I trust fully (full) + + +#### [Utiliser la confiance pour valider les clés](https://www.gnupg.org/gph/en/manual/x334.html) + +* **--completes-needed** + * nombre de signatures de confiance pleine nécessaires pour qu'une nouvelle clé soit de confiance + * défaut 1 +* **--marginals-needed** + * nombre de signatures de confiance marginale nécessaires pour qu'une nouvelle clé soit de confiance + * défaut 3 + + +### [Enigmail](https://enigmail.net) + +* Intégration de GPG à [Thunderbird](https://www.mozilla.org/fr/thunderbird/) +* UI pour la gestion des clés +* Attention à la verison de GPG utilisée + + +### [openKeyChain](https://www.openkeychain.org/) + +* Gestionnaire de clés PGP pour android +* Open source (F-Droid) + + +### [k9mail](https://k9mail.github.io/) -* serveur de clé -* keybase +* Client mail pour android +* Open source (F-Droid) +* bonne intégrationavec OpenKeyChain -## commande pour se connecter à serveur de clé pour les mises à jour -* peut aussi être fait manuellement +https://www.reddit.com/r/privacy/comments/6d3a33/best_android_rom_for_privacy/ -## AndroidPG -## https://openpgpjs.org/ +### [openpgp.js](https://github.com/openpgpjs/openpgpjs) -## enigmail +https://security.stackexchange.com/questions/38219/security-of-running-openpgp-js-in-a-browser-with-the-private-key-in-html5-locals +https://github.com/openpgpjs/openpgpjs/wiki/Introduction diff --git a/content/slides/privacy/md/sovereignty.md b/content/slides/privacy/md/sovereignty.md index a7cacd39a5246a23276e50b44d77d691eb916170..324229519f857eb3617bb0f648c4565a08314c50 100644 --- a/content/slides/privacy/md/sovereignty.md +++ b/content/slides/privacy/md/sovereignty.md @@ -67,3 +67,15 @@ https://degooglisons-internet.org/ * installer ses propres services * sur des machines accessibles physiquement si possible * utiliser des services décentralisés + +## sur mobile + +Android + +F-DROID https://f-droid.org/fr/ + +https://copperhead.co/android/ + +https://www.makeuseof.com/tag/using-android-without-google/ + +cyanogen -> https://lineageos.org/ diff --git a/content/slides/privacy/md/ssl.md b/content/slides/privacy/md/ssl.md index bd8401952f0bd19384c2fdd81685f8bcd1793459..04922916d66a146129e6aeb7630a6626fcd40b9e 100644 --- a/content/slides/privacy/md/ssl.md +++ b/content/slides/privacy/md/ssl.md @@ -309,6 +309,10 @@ note: - https://stackoverflow.com/questions/25482199/verify-a-certificate-chain-using-openssl-verify +## Signer un fichier + +https://raymii.org/s/tutorials/Sign_and_verify_text_files_to_public_keys_via_the_OpenSSL_Command_Line.html + #### Certificate Revocation List (CRL) Révocation de certificats diff --git a/content/slides/privacy/pgp.html b/content/slides/privacy/pgp.html index 68a3d32cddb58c978a4a3f21a8c69ab0d6c7bc9e..47578a41400122154b4e8763ad3958f71fca0d3a 100644 --- a/content/slides/privacy/pgp.html +++ b/content/slides/privacy/pgp.html @@ -12,6 +12,7 @@ <!-- Theme used for syntax highlighting of code --> <link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css"> <link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css"> + <link rel="stylesheet" href="../main.css"> <!-- Printing and PDF exports --> <script>