aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSébastien Dailly <sebastien@chimrod.com>2021-02-13 17:46:31 +0100
committerSébastien Dailly <sebastien@chimrod.com>2021-11-18 14:46:42 +0100
commit9126ed1be6ce0168eafbb705d59505985c8348ec (patch)
tree1b479d616be7e81186c87a8454d95149f1942fc7
parent9d2e9888b1882f855d7690c0f5cffc20137b10d3 (diff)
Sauvegarde de clef GPG sur papier
-rwxr-xr-xcontent/Informatique/2021-02-13-gpg_export.rst136
-rw-r--r--content/images/chiffer/private.pdfbin0 -> 323518 bytes
-rw-r--r--content/images/chiffer/private.pngbin0 -> 34893 bytes
-rwxr-xr-xcontent/pages/applications/applications.rst50
-rwxr-xr-xcontent/pages/applications/calligraphie.svg132
-rw-r--r--content/resources/gpg_export.tar.gzbin0 -> 1636 bytes
-rwxr-xr-xcontent/resources/qrcode.pngbin0 -> 6113 bytes
-rwxr-xr-xtheme/custom/custom.css12
8 files changed, 330 insertions, 0 deletions
diff --git a/content/Informatique/2021-02-13-gpg_export.rst b/content/Informatique/2021-02-13-gpg_export.rst
new file mode 100755
index 0000000..845f1bc
--- /dev/null
+++ b/content/Informatique/2021-02-13-gpg_export.rst
@@ -0,0 +1,136 @@
+.. -*- mode: rst -*-
+.. -*- coding: utf-8 -*-
+
+================================
+Sauvegarder sa clef privée GPG
+================================
+
+:date: 2021-02-13
+:summary: |summary|
+
+.. default-role:: literal
+
+.. |summary| replace::
+
+ Comment exporter et sauvegarder sa clef privée proprement ? Le papier,
+ toujours du papier…
+
+Comme beaucoup sûrement, je chiffre mes sauvegardes avant de les envoyer dans
+le cloud, je chiffre mes mots de passes (et utilise une clef sécurisée pour les
+lire), et utilise pour cela l'outil gpg. Cela me permet d'être sûr que les
+fichiers ne seront pas lus si l'on ne dispose pas de la clef de déchiffrement
+adéquate.
+
+Mais comment sauvegarder sa clef privée ? Est-ce que l'on peut la copier sur
+une clef USB et la laisser dans un tiroir ? Comment s'assurer que la sauvegarde
+sera pérenne ?
+
+On recommande souvent l'outil paperkey pour cela, il génère un document texte
+simple, pouvant être utilisé pour reconstruire la clef privée à partir de le
+clef publique (en partant du principe que ladite clef publique est publique et
+peut être retrouvée facilement). Le document peut ensuite être imprimé, et un
+logiciel OCR permet ensuite de le régénérer.
+
+Je propose une autre solution, basée sur le même principe, mais en qrcode et en
+pdf !
+
+Le qrcode
+=========
+
+.. image:: {static}/resources/qrcode.png
+ :alt: Un qrcode généré
+ :align: center
+ :width: 50%
+
+Je ne présente plus les qrcode, que l'on rencontre déjà partout. La seule chose
+qui est vraiment importante ici, est la taille limite des données qu'il peut
+contenir (source_) :
+
+* Caractères numériques : maximum 7 089
+* Caractères alphanumériques : maximum 4 296
+* Binaires (8-bits) : **maximum 2 953 octets**
+* Kanji/Kana : maximum 1 817 caractères
+
+.. _source: https://fr.wikipedia.org/wiki/Code_QR#Sp%C3%A9cification
+
+Ici, c'est la limite de données binaire qui nous intéresse : 2953 octets. Notre
+clef GPG dépassant probablement cette limite, nous allons la découper en
+plusieurs lots, qui seront chacun d'eux transformés en image.
+
+La commande est assez simple :
+
+.. code-block:: bash
+
+ # Exporte la clef privée et découpe en lot de 2500 octets
+ gpg --export-secret-keys --armor | split -C 2500 - splitkey-
+
+(ici nous créons autant de fichier `splitkey` que nécessaire, avec une taille
+de 2500 octets chacun).
+
+Ensuite, à l'aide de l'application qrencode, on transforme chaque fichier en
+image :
+
+.. code-block:: bash
+
+ # Génère un QRCode pour chacun d'eux
+ for file in tmp/splitkey-??; do
+ qrencode --size 3 -d 150 -t eps -o "${file}.ps" -r "${file}"
+ done
+
+J'utilise ici le format postcript, afin de pouvoir l'intégrer facilement dans
+un fichier pdf : étape suivante !
+
+Récupérer les données
+=====================
+
+Il suffit pour cela de lire chaque image, puis concaténer tous les fichiers
+entre eux. La lecture peut être faite à l'aide du lecteur zbarimg, qui fait
+partie du paquet zbar-tool dans debian :
+
+.. code-block:: bash
+
+ for file in *.png; do
+ zbarimg -1 -q --raw ${file};
+ done > private.key
+
+ gpg --import private.key
+
+(le plus long dans ce cas, est de scanner les fichiers pour en extraire les
+images…)
+
+Le pdf
+======
+
+L'idée est ensuite d'assembler tous ces qrcode dans un document pdf que l'on
+va ensuite imprimer. Comme je suis un grand amateur de la combinaison rst +
+latex, c'est avec ces deux outils que l'on va construire notre document final.
+
+Puisque l'on dispose d'un fichier à imprimer, autant y ajouter une notice, avec
+la manière dont les données ont été générées, et comment les récupérer. À
+ce moment-là, le pdf devient autoporteur, et il est possible ensuite de
+l'oublier puisqu'il contient en lui-même toutes les informations nécessaires.
+
+Voilà un lien pour télécharger un package réalisant tout ça :
+
+.. figure:: {static}/images/package-x-generic.png
+ :alt: get the file
+ :align: center
+ :target: {static}/resources/gpg_export.tar.gz
+
+ Télécharger
+
+la commande `make` permet de lancer les commandes ci-dessus, et générer un
+fichier pdf avec les images, et une petite documentation avec les commandes
+ci-dessus (voir le fichier `private.rst` qui contient le modèle).
+
+Vous pouvez ensuite imprimer le pdf, et supprimer les fichiers, et tester !
+
+À titre d’exemple, voilà ce que donne `le fichier généré`_
+
+.. image:: {static}/images/chiffer/private.png
+ :alt: Un rendu
+ :align: center
+ :width: 50%
+ :target: {static}/images/chiffer/private.pdf
+
+.. _`le fichier généré`: {static}/images/chiffer/private.pdf
diff --git a/content/images/chiffer/private.pdf b/content/images/chiffer/private.pdf
new file mode 100644
index 0000000..adfc421
--- /dev/null
+++ b/content/images/chiffer/private.pdf
Binary files differ
diff --git a/content/images/chiffer/private.png b/content/images/chiffer/private.png
new file mode 100644
index 0000000..8a1ce1c
--- /dev/null
+++ b/content/images/chiffer/private.png
Binary files differ
diff --git a/content/pages/applications/applications.rst b/content/pages/applications/applications.rst
new file mode 100755
index 0000000..c0307dc
--- /dev/null
+++ b/content/pages/applications/applications.rst
@@ -0,0 +1,50 @@
+.. -*- mode: rst -*-
+.. -*- coding: utf-8 -*-
+
+Applications
+============
+
+:save_as: pages/applications/index.html
+:url: pages/applications/
+
+Ce blog contient des applications qui sont disponibles en lignes. Il s'agit
+d'outil dont je me sers au quotidien ou des petits projets que j'ai construit.
+
+.. contents:: \
+
+Fusion de CSS
+-------------
+
+:description: Outil de fusion de CSS en ligne
+:lien: `lien vers la page`__
+
+
+.. __: {filename}/pages/css_merger/css_merger.rst#css-merger
+
+Ardoise calligraphique
+----------------------
+
+:description: Application javascript pour dessiner dans le navigateur avec le
+ même rendu qu'une plume.
+:lien: `lien vers la page`__
+
+.. image:: {static}/pages/applications/calligraphie.svg
+ :align: center
+ :target: {filename}/pages/script.it/script.rst#ardoise-calligraphique
+
+.. __: {filename}/pages/script.it/script.rst#ardoise-calligraphique
+
+
+Graphviz en ligne
+-----------------
+
+:description: Application javascript pour représenter des graphes
+:lien: `lien vers la page`__
+
+.. image:: {static}/resources/viz.js/example.svg
+ :align: center
+ :target: {filename}/pages/graph-editor/graph-editor.rst#graph-editor
+
+.. __: {filename}/pages/graph-editor/graph-editor.rst#graph-editor
+
+
diff --git a/content/pages/applications/calligraphie.svg b/content/pages/applications/calligraphie.svg
new file mode 100755
index 0000000..fc1d077
--- /dev/null
+++ b/content/pages/applications/calligraphie.svg
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="svg52"
+ sodipodi:docname="calligraphie.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
+ width="217.91008"
+ height="144.68098">
+ <metadata
+ id="metadata58">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs56" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1676"
+ inkscape:window-height="1016"
+ id="namedview54"
+ showgrid="false"
+ inkscape:zoom="1.7300546"
+ inkscape:cx="31.275498"
+ inkscape:cy="144.32697"
+ inkscape:window-x="0"
+ inkscape:window-y="30"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg52"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0" />
+ <g
+ fill="#2e3440"
+ stroke="#2e3440"
+ id="g50"
+ transform="matrix(0.38067,0,0,0.38067,-47.242566,-87.030155)">
+ <path
+ d="m 653.56665,502.39999 -8.66025,5 c 23.16655,-26.12852 32.58327,-50.56426 42,-75 l 8.66025,-5 c -9.41672,24.43574 -18.83345,48.87148 -42,75 z"
+ id="path2" />
+ <path
+ d="m 551.56665,576.39999 -8.66025,5 c 41.91707,-20.05016 78.83345,-47.87147 102,-74 l 8.66025,-5 c -23.16655,26.12853 -60.08293,53.94984 -102,74 z"
+ id="path4" />
+ <path
+ d="m 450.56665,593.39999 -8.66025,5 c 12.16516,15.3292 59.08292,3.05017 101,-17 l 8.66025,-5 c -41.91707,20.05017 -88.83484,32.3292 -101,17 z"
+ id="path6" />
+ <path
+ d="m 475.56665,508.39999 -8.66025,5 c -14.57773,26.7334 -37.16517,69.67081 -25,85 l 8.66025,-5 c -12.16516,-15.32919 10.42228,-58.2666 25,-85 z"
+ id="path8" />
+ <path
+ d="m 521.56665,423.39999 -8.66025,5 c -24.85427,47.73722 -31.42228,58.26661 -46,85 l 8.66025,-5 c 14.57772,-26.73339 21.14573,-37.26278 46,-85 z"
+ id="path10" />
+ <path
+ d="m 625.56665,253.39999 -8.66025,5 c -36.0052,37.31773 -79.14573,122.26279 -104,170 l 8.66025,-5 c 24.85427,-47.73721 67.9948,-132.68227 104,-170 z"
+ id="path12" />
+ <path
+ d="m 683.56665,253.39999 -8.66025,5 c 6.87507,-27.00813 -21.9948,-37.31772 -58,0 l 8.66025,-5 c 36.0052,-37.31772 64.87507,-27.00813 58,0 z"
+ id="path14" />
+ <path
+ d="m 589.56665,354.39999 -8.66025,5 c 44.50491,-30.28521 87.12493,-73.99187 94,-101 l 8.66025,-5 c -6.87507,27.00813 -49.49508,70.71479 -94,101 z"
+ id="path16" />
+ <path
+ d="m 458.56665,416.39999 -8.66025,5 c 40.10525,-14.85103 86.49508,-31.71479 131,-62 l 8.66025,-5 c -44.50492,30.28521 -90.89474,47.14897 -131,62 z"
+ id="path18" />
+ <path
+ d="m 353.56665,460.39999 -8.66025,5 c 31.07405,-16.31066 64.89474,-29.14897 105,-44 l 8.66025,-5 c -40.10526,14.85103 -73.92595,27.68934 -105,44 z"
+ id="path20" />
+ <path
+ d="m 274.56665,519.39999 -8.66025,5 c 19.59853,-22.9063 47.92594,-42.68933 79,-59 l 8.66025,-5 c -31.07405,16.31067 -59.40147,36.0937 -79,59 z"
+ id="path22" />
+ <path
+ d="m 247.56665,584.39999 -8.66025,5 c -3.46819,-16.06412 7.40146,-42.09369 27,-65 l 8.66025,-5 c -19.59853,22.90631 -30.46818,48.93588 -27,65 z"
+ id="path24" />
+ <path
+ d="m 294.56665,601.39999 -8.66025,5 c -25.72581,5.16279 -43.53182,-0.93588 -47,-17 l 8.66025,-5 c 3.46818,16.06412 21.27419,22.16279 47,17 z"
+ id="path26" />
+ <path
+ d="m 375.56665,552.39999 -8.66025,5 c -21.6286,27.41299 -55.2742,43.83722 -81,49 l 8.66025,-5 c 25.72581,-5.16278 59.37141,-21.58701 81,-49 z"
+ id="path28" />
+ <path
+ d="m 412.56665,454.39999 -8.66025,5 c -5.75982,32.18529 -15.37141,70.58702 -37,98 l 8.66025,-5 c 21.62859,-27.41298 31.24018,-65.81471 37,-98 z"
+ id="path30" />
+ <path
+ d="m 422.56665,372.39999 -8.66025,5 c -2.33214,23.84588 -4.24019,49.81472 -10,82 l 8.66025,-5 c 5.75982,-32.18528 7.66787,-58.15412 10,-82 z"
+ id="path32" />
+ <path
+ d="m 433.56665,306.39999 -8.66025,5 c -5.91165,20.43121 -8.66787,42.15413 -11,66 l 8.66025,-5 c 2.33214,-23.84587 5.08836,-45.56879 11,-66 z"
+ id="path34" />
+ <path
+ d="m 464.56665,253.39999 -8.66025,5 c -16.0213,13.42928 -25.08836,32.56879 -31,53 l 8.66025,-5 c 5.91164,-20.43121 14.97871,-39.57072 31,-53 z"
+ id="path36" />
+ <path
+ d="m 516.56665,235.39999 -8.66025,5 c -13.00318,-3.14833 -35.97871,4.57072 -52,18 l 8.66025,-5 c 16.0213,-13.42928 38.99682,-21.14833 52,-18 z"
+ id="path38" />
+ <path
+ d="m 517.56665,272.39999 -8.66025,5 c 15.034,-19.83594 12.00317,-33.85166 -1,-37 l 8.66025,-5 c 13.00318,3.14834 16.034,17.16406 1,37 z"
+ id="path40" />
+ <path
+ d="m 428.56665,338.39999 -8.66025,5 c 40.86717,-20.50789 73.966,-46.16405 89,-66 l 8.66025,-5 c -15.034,19.83595 -48.13282,45.49211 -89,66 z"
+ id="path42" />
+ <path
+ d="m 292.56665,395.39999 -8.66025,5 c 46.4973,-21.13249 95.13282,-36.4921 136,-57 l 8.66025,-5 c -40.86717,20.5079 -89.5027,35.86751 -136,57 z"
+ id="path44" />
+ <path
+ d="m 175.56665,471.39999 -8.66025,5 c 26.14363,-27.96214 70.5027,-54.86751 117,-76 l 8.66025,-5 c -46.4973,21.13249 -90.85637,48.03786 -117,76 z"
+ id="path46" />
+ <path
+ d="m 133.56665,557.39999 -8.66025,5 c 7.92818,-29.01892 15.85637,-58.03785 42,-86 l 8.66025,-5 c -26.14363,27.96215 -34.07181,56.98108 -42,86 z"
+ id="path48" />
+ </g>
+</svg>
diff --git a/content/resources/gpg_export.tar.gz b/content/resources/gpg_export.tar.gz
new file mode 100644
index 0000000..5321d40
--- /dev/null
+++ b/content/resources/gpg_export.tar.gz
Binary files differ
diff --git a/content/resources/qrcode.png b/content/resources/qrcode.png
new file mode 100755
index 0000000..2cddd5a
--- /dev/null
+++ b/content/resources/qrcode.png
Binary files differ
diff --git a/theme/custom/custom.css b/theme/custom/custom.css
index 7f6e9b6..f27695a 100755
--- a/theme/custom/custom.css
+++ b/theme/custom/custom.css
@@ -183,3 +183,15 @@ div.figure {
font-size:90%;
color:#6c757d
}
+main article table {
+ width: 100%;
+}
+main article table th.field-name {
+ width: 10em;
+ text-align: right;
+ border-top: 0px;
+ word-wrap:break-word;
+}
+main article table td.field-body {
+ border-top: 0px;
+}