diff options
author | Sébastien Dailly <sebastien@chimrod.com> | 2021-02-13 17:46:31 +0100 |
---|---|---|
committer | Sébastien Dailly <sebastien@chimrod.com> | 2021-11-18 14:46:42 +0100 |
commit | 9126ed1be6ce0168eafbb705d59505985c8348ec (patch) | |
tree | 1b479d616be7e81186c87a8454d95149f1942fc7 | |
parent | 9d2e9888b1882f855d7690c0f5cffc20137b10d3 (diff) |
Sauvegarde de clef GPG sur papier
-rwxr-xr-x | content/Informatique/2021-02-13-gpg_export.rst | 136 | ||||
-rw-r--r-- | content/images/chiffer/private.pdf | bin | 0 -> 323518 bytes | |||
-rw-r--r-- | content/images/chiffer/private.png | bin | 0 -> 34893 bytes | |||
-rwxr-xr-x | content/pages/applications/applications.rst | 50 | ||||
-rwxr-xr-x | content/pages/applications/calligraphie.svg | 132 | ||||
-rw-r--r-- | content/resources/gpg_export.tar.gz | bin | 0 -> 1636 bytes | |||
-rwxr-xr-x | content/resources/qrcode.png | bin | 0 -> 6113 bytes | |||
-rwxr-xr-x | theme/custom/custom.css | 12 |
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 Binary files differnew file mode 100644 index 0000000..adfc421 --- /dev/null +++ b/content/images/chiffer/private.pdf diff --git a/content/images/chiffer/private.png b/content/images/chiffer/private.png Binary files differnew file mode 100644 index 0000000..8a1ce1c --- /dev/null +++ b/content/images/chiffer/private.png 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 Binary files differnew file mode 100644 index 0000000..5321d40 --- /dev/null +++ b/content/resources/gpg_export.tar.gz diff --git a/content/resources/qrcode.png b/content/resources/qrcode.png Binary files differnew file mode 100755 index 0000000..2cddd5a --- /dev/null +++ b/content/resources/qrcode.png 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; +} |