aboutsummaryrefslogtreecommitdiff
path: root/content/Informatique/2021-02-13-gpg_export.rst
blob: 214ba292ae0680c529130f1ed0b3ceb9eecdfb20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
.. -*- mode: rst -*-
.. -*-  coding: utf-8 -*-

================================
Sauvegarder sa clef privée GPG
================================

:date: 2021-02-13
:tags: gpg
: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/mimetypes/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