Actuellement, j'ai 3 paires GPG privées qui sont toutes des clés principales. Je veux convertir ces clés en sous-clés pour une nouvelle paire de clés (et les conserver dans le coffre-fort).
J'ai lu le fil suivant http://atom.smasher.org/gpg/gpg-migrate.txt qui invoque une sorte de piratage du fichier binaire pour convertir une clé principale en une sous-clé et la remplacer avec un autre.
Est-il possible de combiner mes différentes clés en une nouvelle paire de clés unique afin qu'elles restent valides, et je peux recommander aux gens de signer ma clé principale, donc je n'ai pas à craindre de perdre ma clé secrète.
Ce que j'ai
Ici, j'ai 3 clés différentes (la clé privée est disponible).
$ gpg2 -k
----------------------------------
pub 2048R/712A2BBD 2013-01-29
uid Test Key 1
sub 2048R/F0B63FDA 2013-01-29
pub 2048R/72838B89 2013-01-29
uid Test Key 2
sub 2048R/A19F06EC 2013-01-29
pub 2048D/AC349218 2013-03-21
uid Test Key 3
sub 2048g/179E9F47 2013-03-21
Ce que je veux
J'aime convertir ces clés en sous-clés et les déplacer vers une nouvelle clé principale. Il devrait plutôt ressembler à ceci:
pub 4096R/CB577A43 2013-03-21
uid Master Key
sub 2048R/712A2BBD 2013-01-29
sub 2048R/F0B63FDA 2013-01-29
sub 2048R/72838B89 2013-01-29
sub 2048R/A19F06EC 2013-01-29
sub 2048D/AC349218 2013-03-21
sub 2048g/179E9F47 2013-03-21
Est-ce même possible de le faire? Ou sont mon meilleur espoir de révoquer mes 3 clés et de recommencer à zéro et de créer une nouvelle clé qui convient à mon utilisation.
Ce que j'ai fait jusqu'à présent
En utilisant les instructions de http://atom.smasher.org/gpg/gpg-migrate.txt
J'ai réussi à exporter et à extraire mes clés à l'aide de gpgsplit. J'ai également changé le secret_key en secret_subkey en changeant le premier octet från 0x95 en 0x9d
Alors que pgpdump dit que le secret est une sous-clé secrète
~/keytest/key1❯ pgpdump/pgpdump 000001-005.secret_subkey
Old: Secret Subkey Packet(tag 7)(920 bytes)
Ver 4 - new
Public key creation time - Tue Jan 29 13:09:07 CET 2013
Pub alg - RSA Encrypt or Sign(pub 1)
...
J'ai ensuite fusionné toutes les clés ensemble dans une nouvelle clé ma concaténation des fichiers.
$ gpg2 --export-secret-key CB577A43 > master.gpg
$ cat master.gpg key1/* key2/* key3/* > newkey.gpg
# Removed ~/.gnupg
$ gpg2 --import newkey.gpg
# Ended up with this:
$ gpg -k
----------------------------------
pub 4096R/CB577A43 2013-03-21
uid Master Key
sub 2048R/208FAE4C 2013-03-21
~/keytest❯ gpg -K
----------------------------------
sec 4096R/CB577A43 2013-03-21
uid Master Key
ssb 2048R/208FAE4C 2013-03-21
ssb 2048R/712A2BBD 2013-01-29
uid Test Key 1
ssb 2048R/F0B63FDA 2013-01-29
ssb 2048R/72838B89 2013-01-29
uid Test Key 2
ssb 2048R/A19F06EC 2013-01-29
ssb 2048D/AC349218 2013-03-21
uid Test Key 3
ssb 2048g/179E9F47 2013-03-21
Ce qui n'a pas l'air si mal. Mais si j'importe mes clés depuis le serveur de clés gpg2 --recv-keys 712A2BBD 72838B89 AC349218
pour récupérer les signatures. Cela se transforme en ceci:
$ gpg -k
----------------------------------
pub 4096R/CB577A43 2013-03-21
uid Master Key
sub 2048R/208FAE4C 2013-03-21
pub 2048R/712A2BBD 2013-01-29
uid Test Key 1
sub 2048R/F0B63FDA 2013-01-29
pub 2048R/72838B89 2013-01-29
uid Test Key 2
sub 2048R/A19F06EC 2013-01-29
pub 2048D/AC349218 2013-03-21
uid Test Key 3
sub 2048g/179E9F47 2013-03-21
Ce qui reste
Après cela, j'ai 4 clés publiques dans mon trousseau de clés. Je voulais déplacer ces clés afin qu'elles dépendent de la clé principale CB577A43 comme ci-dessus sous Ce que je veux.
Cela peut être fait.
Les instructions sur atom.smasher.org/gpg/gpg-migrate.txt sont maintenant obsolètes.
Essaye ça. Comme toujours, faites des sauvegardes, car il est très facile de tout gâcher.
Voici donc vos "anciennes" clés:
$ gpg -K
----------------------------------
sec 2048R/712A2BBD 2013-01-29
uid Test Key 1
ssb 2048R/F0B63FDA 2013-01-29
sec 2048R/72838B89 2013-01-29
uid Test Key 2
ssb 2048R/A19F06EC 2013-01-29
sec 2048D/AC349218 2013-03-21
uid Test Key 3
ssb 2048g/179E9F47 2013-03-21
Et vous avez créé une nouvelle "clé principale" qui n'a pas de sous-clés:
sec 4096R/CB577A43 2013-03-21
uid Master Key
Par souci de simplicité, je ne répéterai la procédure qu'en utilisant la première de vos "anciennes" clés:
sec 2048R/712A2BBD 2013-01-29
uid Test Key 1
ssb 2048R/F0B63FDA 2013-01-29
En utilisant la même procédure, vous pouvez tous les ajouter. Je vous recommande de les ajouter tous en même temps, car chaque fois que vous cassez les clés puis les réassemblez, vous devez recréer les signatures de liaison, ce qui est pénible.
$ gpg --export-secret-keys 712A2BBD | gpgsplit -vp 712A2BBD_
Regardez maintenant les fichiers qu'il a créés:
$ ls
----------------------------------
712A2BBD_000001-005.secret_key
712A2BBD_000002-013.user_id
712A2BBD_000003-002.sig
712A2BBD_000004-007.secret_subkey
712A2BBD_000005-002.sig
Le premier fichier, "712A2BBD_000001-005.secret_key" contient le paquet de la clé privée principale ( balise de type de paquet 5 , d'où le "005") de votre "ancienne" clé, "712A2BBD". (Vous en aurez besoin, mais vous devrez le convertir en sous-clé si vous souhaitez le migrer dans votre nouvelle "clé principale". Dans les clés générées à l'aide des paramètres standard sur GPG, la clé privée principale a normalement des indicateurs d'utilisation "S" pour signe et "C" pour certifier, et n'a pas "E" pour chiffrer, ce qui est normalement la raison pour laquelle la clé est générée avec une sous-clé "E". Cependant, en raison de la procédure que nous utilisons, quand finalement la clé principale est transformé en sous-clé et migré vers votre nouvelle "clé principale", tous les indicateurs d'utilisation ("SCEA") seront activés. Ceci le rend probablement moins sécurisé , et c'est probablement un comportement à éviter. )
Le deuxième fichier, "712A2BBD_000002-013.user_id", est le paquet pour l'ID utilisateur ( balise de type de paquet 1 ). (Vous n'en aurez pas besoin).
Le troisième fichier, "712A2BBD_000003-002.sig", est une signature de liaison ( balise de type de paquet 2 ) pour ces paquets. (Vous n'en aurez pas besoin).
Le quatrième fichier est le paquet de la sous-clé secrète (F0B63FDA) ( balise de type de paquet 7 ). (Vous en aurez besoin. En règle générale, une sous-clé comme celle-ci a l'indicateur d'utilisation "E", ce qui signifie qu'elle est uniquement destinée au chiffrement. Cependant, lors de son importation sur votre nouvelle "clé principale", elle acquiert tous les indicateurs d'utilisation , ("SCEA"), ce qui est probablement pas une bonne chose .)
Le cinquième fichier, "712A2BBD_000005-002.sig", est la signature de liaison ( balise de type de paquet 2 ) pour la sous-clé. Vous n'en aurez pas besoin.
Enregistrez les deux fichiers dont vous avez besoin et supprimez les autres.
Vous n'avez rien à faire avec la sous-clé (F0B63FDA) pour la migrer vers votre nouvelle "clé principale", mais la clé principale (712A2BBD) de votre ancienne clé doit être modifiée afin de la faire fonctionner.
Ouvrez la clé principale, "712A2BBD_000001-005.secret_key", dans un éditeur capable d'effectuer des modifications hexadécimales ou binaires. J'ai utilisé ghex :
$ ghex 712A2BBD_000001-005.secret_key
Si vous utilisez un éditeur hexadécimal, le premier octet sera "95". Changez-le en "9D".
Si vous utilisez un éditeur binaire, le premier octet sera "10010101". Remplacez-le par "10011101".
Enregistrez-le, puis utilisez pgpdump pour voir si vous avez réussi à le remplacer par une sous-clé. Si vous avez réussi, vous verrez la sortie suivante:
$ pgpdump 712A2BBD_000001-005.secret_key | head -1
-----------------
Old: Secret Subkey Packet(tag 7)(1836 bytes)
Tout comme dans le tutoriel à atom.smasher.org , vous devrez créer de nouvelles sous-clés "factices" sur votre "clé principale" afin de vous assurer que vous avez des signatures de liaison sur la clé principale qui peuvent accueillir (au moins au début) les sous-clés en migration.
Considérez-le comme la création de "slots" pour les anciennes sous-clés. Vous aurez besoin d'autant d'emplacements que de clés que vous souhaitez ajouter.
Dans le présent exemple, nous créerons deux sous-clés factices, mais si vous souhaitez ajouter toutes les clés que vous avez répertoriées dans votre message d'origine, vous voudrez en créer six.
$ gpg --expert --edit-key CB577A43
----------------------------------------
gpg (GnuPG) 1.4.12; Copyright (C) 2012 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.
Secret key is available.
pub 4096R/CB577A43 created: 2013-03-21 expires: never usage: SC
trust: unknown validity: unknown
gpg>addkey
Assurez-vous, en passant par l'assistant de génération de sous-clé (qui est en mode expert, grâce à l'option --expert ci-dessus) que lorsque vous générez votre nouvelle sous-clé "factice", elle est de même ...
... comme sous-clé que vous avez l'intention d'ajouter dans cet "emplacement".
Puisque nous ajoutons deux sous-clés, nous terminons avec deux nouvelles sous-clés "factices" sur la "clé principale". Sauvegarder et quitter:
pub 4096R/CB577A43 created: 2013-03-21 expires: never usage: SC
trust: unknown validity: unknown
sub 2048R/AAAAAAAA created: 2014-01-01 expires: never usage: S
sub 2048R/BBBBBBBB created: 2014-01-01 expires: never usage: E
gpg> save
$ gpg --export-secret-keys CB577A43 | gpgsplit -vp CB577A43_
Vous devriez vous retrouver avec quelque chose comme ceci:
$ ls
----------------
CB577A43_000001-005.secret_key
CB577A43_000002-013.user_id
CB577A43_000003-002.sig
CB577A43_000004-007.secret_subkey
**CB577A43_000005-002.sig**
CB577A43_000006-007.secret_subkey
**CB577A43_000007-002.sig**
Les cinquième et septième fichiers (ceux que j'ai mis dans ** s) sont les paquets de signature de liaison de clé de sous-clé qui ont été générés lorsque vous avez généré les "sous-clés factices". Vous en aurez besoin.
Les quatrième et sixième fichiers sont les paquets de "sous-clé factice" réels. Ils peuvent maintenant être supprimés en toute sécurité (les seuls fichiers que vous devez supprimer.)
$ rm CB577A43_000004-007.secret_subkey CB577A43_000006-007.secret_subkey
Les étapes un et deux vous ont laissé deux fichiers:
712A2BBD_000001-005.secret_key (the original main key of your "old key", now edited into a subkey)
712A2BBD_000004-007.secret_subkey (the original subkey of your "old key".)
Maintenant, copiez-les dans le dossier avec les constituants fractionnés de la "clé principale" et renommez ces fichiers afin qu'ils remplacent les fichiers "sous-clé factice" que nous venons de supprimer.
$ mv 712A2BBD_000001-005.secret_key CB577A43_000004-007.secret_subkey
$ mv 712A2BBD_000004-007.secret_subkey CB577A43_000006-007.secret_subkey
Vous devriez à nouveau avoir sept fichiers (dans cet exemple), mais les fichiers quatre et six sont maintenant vos anciennes clés, tous définis et prêts à devenir des sous-clés de votre nouvelle clé principale.
$ ls
----------------
CB577A43_000001-005.secret_key
CB577A43_000002-013.user_id
CB577A43_000003-002.sig
**CB577A43_000004-007.secret_subkey**
CB577A43_000005-002.sig
**CB577A43_000006-007.secret_subkey**
CB577A43_000007-002.sig
Rassemblez les fichiers afin qu'ils soient concaténés consécutivement en fichiers uniques, pour faciliter l'importation plus tard.
$ cat CB577A43_000001-005.secret_key CB577A43_000002-013.user_id CB577A43_000003-002.sig CB577A43_000004-007.secret_subkey CB577A43_000005-002.sig CB577A43_000006-007.secret_subkey CB577A43_000007-002.sig > concatenated_CB577A43.secret
Utilisez la même commande, mais dirigez la sortie vers gpgsplit afin de créer des homologues publics, avant de rediriger vers un nouveau fichier:
$ cat CB577A43_000001-005.secret_key CB577A43_000002-013.user_id CB577A43_000003-002.sig CB577A43_000004-007.secret_subkey CB577A43_000005-002.sig CB577A43_000006-007.secret_subkey CB577A43_000007-002.sig | gpgsplit --no-split --secret-to-public > concatenated_CB577A43.public
$ cp -R ~/.gnupg/ ~/.gnupg_backup
$ gpg --delete-secret-and-public-keys CB577A43 712A2BBD
Récemment, chaque fois que quelqu'un essaie de suivre le didacticiel sur atom.smasher.org , le problème qu'ils rencontrent est qu'avec les dernières versions de gpg, une fois qu'ils ont réassemblé la clé et l'ajoutée à leur trousseau, le les sous-clés ajoutées 1) n'ont aucun indicateur d'utilisation et 2) elles ne peuvent pas réinitialiser la date d'expiration, comme indiqué dans le tutoriel atom.smasher.org , une étape nécessaire pour créer de nouvelles signatures de liaison de touches valides. Le résultat est qu'après un cycle d'exportation/importation, les clés sont considérées comme invalides par GPG et disparaissent du trousseau de clés privé.
Pour importer avec succès les clés, vous devez télécharger et construire une ancienne version de gnupg: ne version de 2002 rien de moins. Une fois que vous l'avez construit, vous pourrez réinitialiser les dates d'expiration sur les nouvelles clés et recréer avec succès des raccourcis clavier valides pour les clés.
Téléchargez l'ancien gnupg.
$ wget ftp://mirror.tje.me.uk/pub/mirrors/ftp.gnupg.org/gnupg/gnupg-1.2.0.tar.bz2
$ tar -xjf gnupg-1.2.0.tar.bz2
$ cd gnupg-1.2.0/
$ ./configure
$ make
Accédez au dossier g10, qui contient votre nouveau fichier binaire gpg
$ cd g10
Afin d'utiliser ce binaire, au lieu de la construction de gpg à l'échelle du système, qui est plus récente, vous devez taper le chemin absolu vers le binaire. Si vous êtes dans le même dossier, utilisez ./gpg, par exemple:
$ ./gpg --list-keys
N'importez pas les clés de manière normale, car les signatures de liaison de clés ne sont pas extraites, ce qui fait que les sous-clés importées n'importeraient pas de manière normale. Au lieu de cela, placez les fichiers à la fin de vos porte-clés publics et privés.
$ cat concatenated_CB577A43.secret >> ~/.gnupg/secring.gpg
$ cat concatenated_CB577A43.public >> ~/.gnupg/pubring.gpg
Vérifiez qu'ils y sont entrés en utilisant le gnupg-1.2.0 pour lister les clés:
$ ./gpg --list-keys
-----------------
pub 4096R/CB577A43 2013-03-21
uid Master Key
sub 2048R/712A2BBD 2013-01-29
sub 2048R/F0B63FDA 2013-01-29
Assurez-vous de revenir au dossier de génération pour gnupg-1.2.0/g10 et invoquez le binaire créé pour modifier votre clé principale nouvellement importée et nouvellement assemblée, avec vos anciennes sous-clés importées:
$ ./gpg --edit-keys CB577A43
-----------------
sec 4096R/CB577A43 created: 2013-03-21 expires: never
ssb 2048R/712A2BBD created: 2013-01-29 expires: never
ssb 2048R/F0B63FDA created: 2013-01-29 expires: never
Tout d'abord, réinitialisez les mots de passe.
Command> passwd
Il est probable que toutes vos anciennes clés avaient des mots de passe différents de votre nouvelle clé principale. Si vous réinitialisez le mot de passe maintenant, il vous demandera tour à tour chacun des mots de passe des anciennes clés (ainsi que l'ID de la sous-clé) et lorsque vous les aurez tous correctement entrés, il vous demandera une nouvelle clé. Une fois cela fait, ils auront tous le même mot de passe, évitant les bizarreries plus tard.
Ensuite, réinitialisez la date d'expiration sur TOUTES les clés. Commencez par la clé principale principale:
Command> expiry
Et ensuite, progressez dans chacune des sous-clés, en modifiant la date d'expiration de chacune d'entre elles.
Command> key 1
Command> expiry
Command> key 1
Command> key 2
Command> expiry
Command> key 2
Command> key 3
Etc
Assurez-vous de le changer en une valeur sur laquelle il n'était pas déjà activé, sinon il n'y aura aucun changement. Vous pouvez la rétablir ultérieurement à sa valeur d'origine: ce qui est maintenant nécessaire est une modification, afin que gpg-1.2.0 puisse créer de nouvelles signatures de liaison de sous-clé.
Une fois que tout cela est fait, enregistrez.
Command> save
gnupg-1.2.0 va quitter et enregistrer les nouvelles signatures de liaison de touches, validant la migration de vos anciennes clés vers votre nouvelle clé principale.
Ouvrez la même clé pour l'édition à l'aide de la version standard de gpg à l'échelle du système, pour voir si cela a fonctionné. Si cela a fonctionné, vous verrez deux choses:
.
$ gpg --edit-key CB577A43
--------------------------
pub 4096R/CB577A43 created: 2013-03-21 expires: [newdate] usage: SC
trust: unknown validity: unknown
sub 2048R/712A2BBD created: 2013-01-29 expires: [newdate] usage: SCEA
sub 2048R/F0B63FDA created: 2013-01-29 expires: [newdate] usage: SCEA
Si cela n'a pas fonctionné, les indicateurs d'utilisation seront vides et la date d'expiration affichera désormais la modification que vous venez d'apporter à l'étape 9.
$ gpg --edit-key CB577A43
--------------------------
pub 4096R/CB577A43 created: 2013-03-21 expires: **never** usage: SC
trust: unknown validity: unknown
sub 2048R/712A2BBD created: 2013-01-29 expires: **never** usage:
sub 2048R/F0B63FDA created: 2013-01-29 expires: **never** usage:
Enfin, vous devez le faire passer par un cycle d'exportation/importation et supprimer les clés entre les deux. S'il survit à cela, la procédure a fonctionné.
$ gpg --export-secret-keys CB577A43 > CB577A43_new.secret
$ gpg --export CB577A43 > CB577A43_new.public
$ gpg --delete-secret-and-public-keys CB577A43
$ gpg --import CB577A43_new.secret CB577A43_new.public
$ gpg --edit-key CB577A43
--------------------------
pub 4096R/CB577A43 created: 2013-03-21 expires: [newdate] usage: SC
trust: unknown validity: unknown
sub 2048R/712A2BBD created: 2013-01-29 expires: [newdate] usage: SCEA
sub 2048R/F0B63FDA created: 2013-01-29 expires: [newdate] usage: SCEA
En supposant que cela fonctionne, vous devrez maintenant certification croisée vos sous-clés, afin qu'elles puissent créer et vérifier des signatures.
$ gpg --edit-key CB577A43
Et à partir de l'invite d'édition de gpg:
gpg> cross-certify
Vous devrez également réinitialiser la confiance:
gpg> trust
Enfin, assurez-vous de tester la clé rigoureusement, pour vous assurer qu'elle fonctionne avant de la distribuer. Je me réfère au tutoriel atom.smasher.org pour ces étapes finales:
vérifiez toutes les dates d'expiration et les préférences. certaines de ces opérations peuvent avoir modifié vos dates d'expiration et vos préférences; réinitialiser si nécessaire.
tester tous les composants clés pour la création et la vérification des signatures et le chiffrement/déchiffrement. utilisez le bang (!) pour forcer chaque (sous) clé: créez et vérifiez les signatures:
$ date | gpg -u '712A2BBD!' --clearsign | gpg -v --verify $ date | gpg -u 'F0B63FDA!' --clearsign | gpg -v --verify
crypter décrypter:
$ date | gpg -ear '712A2BBD!' | gpg -v --decrypt $ date | gpg -ear 'F0B63FDA!' | gpg -v --decrypt
après avoir testé les clés localement, envoyez votre nouvelle clé publique à une ou deux personnes et testez tous les composants clés (en vous envoyant des messages signés/cryptés à l'aide de tous les composants clés). assurez-vous qu'ils ont d'abord supprimé (de leurs trousseaux) votre ancienne clé! et assurez-vous qu'ils comprennent que la clé ne doit PAS être distribuée tant que toutes les fonctions ne sont pas vérifiées pour fonctionner!
lors de la mise en circulation de la nouvelle clé, c'est probablement une bonne idée de faire expirer/révoquer l'ancienne clé. inclure un commentaire de révocation qui spécifie le nouvel ID de clé et les instructions pour supprimer l'ancienne clé du trousseau.
note sur la révocation de clé: selon les normes OpenPGP, une révocation générée par une sous-clé sera ignorée, sauf si cette sous-clé a été désignée (par la clé primaire) comme clé de révocation. GnuPG semble se comporter correctement, mais certaines versions de PGP (tm) peuvent ne pas l'être. si quelqu'un prétend que votre nouvelle clé a été révoquée, retirez ensuite toutes vos clés anciennes et actuelles de son trousseau: puis réimportez votre ou vos clés actuelles.
Il existe un moyen facile de le faire à partir, si je ne me trompe pas, de GnuPG 2.1. Vous venez de créer votre nouvelle clé primaire, puis ajoutez tout autre clé existante en tant que sous-clé.
Ici, j'ai une vieille clé:
$ gpg2 --with-keygrip -k
<...>
------------------------------------
pub rsa2048 2017-05-31 [SC] [expires: 2019-05-31]
3758BEEEA38377DC66708915C102DFD7B21740B0
Keygrip = 42B4CE6092555D85F6BF93CEE13DC20A0B347048
uid [ultimate] Mr Test
sub rsa2048 2017-05-31 [E]
Keygrip = A5CA49DB1EF812E278340BE6B8590D51F5EF9A2C
Je crée d'abord une clé primaire complètement nouvelle:
$ gpg2 --quick-generate-key 'Mr Test New'
About to create a key for:
"Mr Test New"
Continue? (Y/n) y
<...>
pub rsa2048 2017-05-31 [SC] [expires: 2019-05-31]
4B496C1EF14F63BBA2F7C566AEA5541400F78E93
4B496C1EF14F63BBA2F7C566AEA5541400F78E93
uid Mr Test New
sub rsa2048 2017-05-31 [E]
(J'ai utilisé --quick-generate-key
pour la simplicité. Bien sûr, vous pouvez aller avec --generate-key
ou --full-generate-key
si vous le souhaitez.)
Ensuite, je vais modifier la nouvelle clé en utilisant le --expert
drapeau:
$ gpg2 --expert --edit-key 4B496C1EF14F63BBA2F7C566AEA5541400F78E93
<...>
sec rsa2048/AEA5541400F78E93
created: 2017-05-31 expires: 2019-05-31 usage: SC
trust: ultimate validity: ultimate
ssb rsa2048/7882EFF25C40792B
created: 2017-05-31 expires: never usage: E
[ultimate] (1). Mr Test New
gpg>
J'utilise la sous-commande addkey
et à cause de --expert
flag cela me donnera une option pour ajouter une clé existante en utilisant son keygrip (c'est l'option 13 dans mon exemple, mais les nombres peuvent changer, j'ai donc choisi d'utiliser l'alias stable keygrip
):
gpg> addkey
Please select what kind of key you want:
<...>
(13) Existing key
Your selection? keygrip
Enter the keygrip: 42B4CE6092555D85F6BF93CEE13DC20A0B347048
Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Sign Encrypt
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? e
Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Sign
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? q
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 365
Key expires at Thu May 31 10:21:30 2018 MSK
Is this correct? (y/N) y
Really create? (y/N) y
sec rsa2048/AEA5541400F78E93
created: 2017-05-31 expires: 2019-05-31 usage: SC
trust: ultimate validity: ultimate
ssb rsa2048/7882EFF25C40792B
created: 2017-05-31 expires: never usage: E
ssb rsa2048/072D4F8908E1A926
created: 2017-05-31 expires: 2018-05-31 usage: S
[ultimate] (1). Mr Test New
gpg>
(Lorsque vous êtes interrogé sur les actions autorisées, ajustez correctement les fonctionnalités clés car elles seront toujours par défaut signées et chiffrées.)
De cette façon, vous pouvez ajouter toutes les anciennes clés primaires et leurs sous-clés à votre nouvelle clé. Et n'oubliez pas de save
à la fin.
Vous pouvez vérifier qu'il s'agit bien de la même clé en comparant les poignées:
$ gpg2 --with-keygrip -k
<...>
------------------------------------
pub rsa2048 2017-05-31 [SC] [expires: 2019-05-31]
3758BEEEA38377DC66708915C102DFD7B21740B0
Keygrip = 42B4CE6092555D85F6BF93CEE13DC20A0B347048
uid [ultimate] Mr Test
sub rsa2048 2017-05-31 [E]
Keygrip = A5CA49DB1EF812E278340BE6B8590D51F5EF9A2C
pub rsa2048 2017-05-31 [SC] [expires: 2019-05-31]
4B496C1EF14F63BBA2F7C566AEA5541400F78E93
Keygrip = CB90DD9613FC321B2E609D8ECB219657A6AFCFDD
uid [ultimate] Mr Test New
sub rsa2048 2017-05-31 [E]
Keygrip = D0E14A5E1CD161CF2F18F9EBA53AB2EF12705679
sub rsa2048 2017-05-31 [S] [expires: 2018-05-31]
Keygrip = 42B4CE6092555D85F6BF93CEE13DC20A0B347048
Malheureusement, votre meilleure option serait de révoquer les clés, d'en créer une nouvelle avec les sous-clés souhaitées et de les télécharger sur le serveur de clés. J'ai essayé de faire cette opération de fractionnement et de fusion il y a quelques années et j'ai rencontré des problèmes similaires à vous. J'ai finalement rencontré un excellent article montrant pourquoi cela ne fonctionne pas, mais je n'arrive pas à le trouver. Si je le fais, je posterai le lien.
Cela peut simplement être une question de suppression des sous-clés de votre serveur de clés, car je pense que lorsque vous essayez d'importer les signatures, vous écrasez les types de clés à leur valeur d'origine.
Si vos clés consolidées n'ont pas les signatures que vous attendez, vous devrez peut-être vérifier qu'elles se trouvent dans les clés que vous fractionnez et qu'elles sont rajoutées correctement lors du réassemblage. Est-ce peut-être un problème de commande lorsque vous les concaténez? Ou manque-t-il des signatures du maître qui signe les sous-clés lors de leur réassemblage (type de sig 0x18: sig de liaison de sous-clé)?
Je suggérerais de créer une nouvelle clé principale avec trois sous-clés exactement comme ce à quoi vous voulez que votre produit final ressemble, puis de le vider ou de le diviser pour voir comment il est construit, et enfin d'assembler votre clé principale d'origine avec des sous-clés dans le même ordre avec tous les mêmes pièces. Faites attention aux types de signature dans pgpdump, car vous devrez peut-être en créer certains. gpg --edit-key peut aider à cela et à vérifier les signatures des clés.
Poussez ensuite vos clés mises à jour sur le serveur avant d'essayer de les télécharger à nouveau.
edit: Je devrais ajouter que si l'une des signatures de sous-clé que vous essayez de restaurer provient de l'une des autres sous-clés, elles devraient probablement être omises, car elles n'ont pas de sens dans leur nouveau contexte. En fait, je vérifierais que les sous-clés sont normalement signées du tout, ou si seule la clé principale est normalement signée.
Merci à Breakbits pour la procédure détaillée. Les indicateurs d'utilisation perdus/cassés peuvent être corrigés avec un nouveau selfsig. Ma recherche a montré plusieurs articles dans gnupg-users sur le sujet, tous disant essentiellement "non pris en charge mais vous pouvez modifier le code". Un article cité par un autre thread a fourni un aperçu d'une solution de code, mais cela ne fonctionne pas en fait. (C'est le (*p) &= ~2
Publier; dans gnupg-1.4 récent au moins, cela fait que votre gpg local analyse votre clé pour ressembler à si vous avez changé les indicateurs d'utilisation, mais ne change pas réellement votre matériau de clé et cela ne fonctionnera pas dans le gpg de quelqu'un d'autre, ce que vous voulez après tout.)
Comme je n'ai trouvé aucune solution existante, j'ai écrit un correctif pour gnupg-1.4 pour vraiment corriger les indicateurs d'utilisation en permettant des modifications d'indicateur d'utilisation presque arbitraires dans --edit-key. Il ne nécessite pas de modification de l'expiration, ce qui peut être une astuce courante pour forcer une mise à jour selfsig. Vous pouvez le trouver ici si vous êtes intéressé: https://github.com/xdgc/gnupg/tree/dgc/usage-1-4 .